Notice: Firmware Links Under Maintenance We are currently undergoing maintenance on all firmware links. If any links are inaccessible, please email or contact Tech Support for the firmware. We appreciate your patience during the maintenance, thank you for your understanding.

System messages

This is a list of system messages available in the MediaWiki namespace. Please visit MediaWiki Localisation and translatewiki.net if you wish to contribute to the generic MediaWiki localisation.

Filter
Filter by customization state:    
First page
Last page
Name Default message text
Current message text
coll-suggest_reset_bans (talk) (Translate) reset
coll-suggest_reset_bans_tooltip (talk) (Translate) Show previously removed suggestions
coll-suggest_show (talk) (Translate) show
coll-suggest_title (talk) (Translate) Suggested pages for your book
coll-suggest_undo (talk) (Translate) undo
coll-suggest_undo_tooltip (talk) (Translate) Undo this action
coll-suggest_your_book (talk) (Translate) Your book
coll-suggested_articles (talk) (Translate) Suggestions
coll-title (talk) (Translate) Title:
coll-unknown_subpage_text (talk) (Translate) This subpage of [[Special:Book|Book]] does not exist.
coll-unknown_subpage_title (talk) (Translate) Unknown subpage
coll-update (talk) (Translate) Update
coll-user_book_prefix (talk) (Translate) -
coll-yes (talk) (Translate) Yes
coll-your_book (talk) (Translate) Your book
collapsible-collapse (talk) (Translate) Collapse
collapsible-expand (talk) (Translate) Expand
colon-separator (talk) (Translate) :
columns (talk) (Translate) Columns:
comma-separator (talk) (Translate) ,
common.css (talk) (Translate) /* CSS placed here will be applied to all skins */
@import url("https://dahuawiki.com/images/font-awesome.min.css"); /* To make images responsive */ .res-img img { max-width:100%; height:auto; } #my-div { width : 1200px; height : 1200px; overflow : hidden; position : relative; } #my-iframe { position : absolute; top : -385px; left : -15px; width : 1280px; height : 1200px; } .wallpaper1 { background: url("https://dahuawiki.com/index.php?action=ajax&title=-&rs=SecureFileStore::getFile&f=/e/e9/New_GUI_Background2.jpg") no-repeat center top !important; } input { width:100%; display:block; border: 1px solid #999; height: 25px; -webkit-box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.3); -moz-box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.3); box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.3); } form { background: -webkit-gradient(linear, bottom, left 175px, from(#CCCCCC), to(#EEEEEE)); background: -moz-linear-gradient(bottom, #CCCCCC, #EEEEEE 175px); margin:auto; font-family: Tahoma, Geneva, sans-serif; font-size: 14px; line-height: 24px; font-weight: bold; text-decoration: none; padding:10px; } input[type="checkbox"]{ width: 13px; height: 13px; padding: 0; margin:0; vertical-align: bottom; position: relative; top: -1px; } #checkStuff{ display: block; padding-left: 15px; text-indent: -15px; border:1px solid blue; } .mw-collapsible-toggle { display:inline-block; float:none; border:none; background-color: transparent; } .wikitable td ul, .wikitable td ol, .wikitable td dl { text-align: center; } #footer img { display: none; } .mw-content-ltr ul, .mw-content-rtl .mw-content-ltr ul { margin: 0em 0 0 0em; padding: 0; padding-left: 19px; } #content { padding: 1.5em; line-height: 1.5em; } div#content a.external { background:none !important; padding: 0px !important; } #bs-left-column #bs-nav-sections.ui-tabs div.ui-tabs-panel { background: #f2f2f2; } #bs-apps ul.bs-apps-child { background-color: grey; } #bs-apps ul.bs-apps-child li { background: lightgrey; } #content h1 { margin-bottom: 5px; position: absolute; top: 35px; } #toc { float: right }; #bs-apps li a {display:none;} #bs-left-column .ui-tabs .ui-tabs-panel { padding-left: 10px !important; } #bs-menu-top-right > div, #bs-user-container > div { float: none; position: absolute; right: 0px; top: 10px; } #bs-button-user { display: none; } #ca-history { display: none !important; } #bs-cexport-button { display: none !important; } #bs-statebar-viewtoggler span { display: none; } #bs-nav-sections h5 { text-transform: none; } #firstHeading { display: none; } .icon24 { display: none; } #ca-talk { display: none !important; } #sb-LastEditor { display: none !important; } #bs-content-column #left-navigation li a {display:none;} #sb-PageAssignments-Top-link {display:none;} #sb-PageAssignments-Top-icon {display:none;} #bs-nav-item-text"About BlueSpice" {display:none;} #n-aboutbluespice { display: none !important; } .bs-statebar-top-item { height: 30px !important; } #bs-nav-tabs { background: rgb(236,31,39); } #bs-data-after-content { background-color: #FFF; border-top: 2px solid black; clear: both; } #bs-apps li a { color: grey; } #searchform button { border: 1px solid rgb(236,31,39); background-color: rgb(236,31,39); border: 0.1px solid rgb(236,31,39); } #searchform input { padding: 0px 3px; width: 325px; border: 1px solid #eee; } #bs-left-column #bs-nav-tabs li.ui-state-default.ui-tabs-selected a, #bs-left-column #bs-nav-tabs li.ui-state-default.ui-state-active a, #bs-left-column #bs-nav-tabs li.ui-state-default.ui-state-hover a, #bs-left-column #bs-nav-tabs li.ui-state-default.ui-state-hover a:hover { color: black; } #bs-data-before-content, #bs-data-after-content { border-top: 1px solid rgb(236,31,39); } #bs-content-column #left-navigation li.selected a { color: black; } #bs-application { margin-top: -13px; } #bs-nav-sections { position: absolute; top: 77px; width: 276px; } #body.mediawiki #content a, body.mediawiki #content #toc a span { color: black; } #bs-content-column, #footer { margin-left: 131px; } #bs-statebar-viewtoggler { height: 26px; } #bs-statebar { height: 29px; } #bs-application { margin-top: -54px; } #bs-button-user ul#bs-personal-info { display: none; } #bs-left-column #bs-nav-sections, #bs-left-column #bs-nav-sections h5, #bs-left-column #bs-nav-sections a, #bs-left-column #bs-nav-sections .ui-widget-content a { width: 131px; } #ext-gen1018 { border-top-width: 1px; } right-navigation { padding-bottom: 2px; } bs-statebar-top-item span, .bs-statebar-top-item a, .bs-statebar-top-item a:visited { color: black; } /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; } .infobox caption { font-size: 125%; font-weight: bold; padding: 0.2em; } .infobox td, .infobox th { vertical-align: top; /* @noflip */ text-align: left; } .infobox.bordered { border-collapse: collapse; } .infobox.bordered td, .infobox.bordered th { border: 1px solid #a2a9b1; } .infobox.bordered .borderless td, .infobox.bordered .borderless th { border: 0; } .infobox.sisterproject { width: 20em; font-size: 90%; } .infobox.standard-talk { border: 1px solid #c0c090; background-color: #f8eaba; } .infobox.standard-talk.bordered td, .infobox.standard-talk.bordered th { border: 1px solid #c0c090; } /* styles for bordered infobox with merged rows */ .infobox.bordered .mergedtoprow td, .infobox.bordered .mergedtoprow th { border: 0; border-top: 1px solid #a2a9b1; /* @noflip */ border-right: 1px solid #a2a9b1; } .infobox.bordered .mergedrow td, .infobox.bordered .mergedrow th { border: 0; /* @noflip */ border-right: 1px solid #a2a9b1; } /* Styles for geography infoboxes, eg countries, country subdivisions, cities, etc. */ .infobox.geography { border-collapse: collapse; line-height: 1.2em; font-size: 90%; } .infobox.geography td, .infobox.geography th { border-top: 1px solid #a2a9b1; padding: 0.4em 0.6em 0.4em 0.6em; } .infobox.geography .mergedtoprow td, .infobox.geography .mergedtoprow th { border-top: 1px solid #a2a9b1; padding: 0.4em 0.6em 0.2em 0.6em; } .infobox.geography .mergedrow td, .infobox.geography .mergedrow th { border: 0; padding: 0 0.6em 0.2em 0.6em; } .infobox.geography .mergedbottomrow td, .infobox.geography .mergedbottomrow th { border-top: 0; border-bottom: 1px solid #a2a9b1; padding: 0 0.6em 0.4em 0.6em; } .infobox.geography .maptable td, .infobox.geography .maptable th { border: 0; padding: 0; } /* Normal font styling for table row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row] { font-weight: normal; /* @noflip */ text-align: left; } /* ...unless they also use the hlist class */ .toc.hlist ul, #toc.hlist ul, .wikitable.hlist td ul, .wikitable.hlist td ol, .wikitable.hlist td dl { text-align: inherit; } .ritz .waffle .s0 { /* border-bottom: 1px SOLID #000000; */ /* border-right: 1px SOLID #000000; */ } body.mediawiki h2 { font-size: 175%; } /* Standard Navigationsleisten, aka box hiding thingy from .de. Documentation at [[Wikipedia:NavFrame]]. */ div.NavFrame { margin: 0; padding: 4px; border: 1px solid #aaa; text-align: center; border-collapse: collapse; font-size: 95%; } div.NavFrame + div.NavFrame { border-top-style: none; border-top-style: hidden; } div.NavPic { background-color: #fff; margin: 0; padding: 2px; /* @noflip */ float: left; } div.NavFrame div.NavHead { height: 1.6em; font-weight: bold; background-color: #eee; position: relative; } div.NavFrame p, div.NavFrame div.NavContent, div.NavFrame div.NavContent p { font-size: 100%; } div.NavEnd { margin: 0; padding: 0; line-height: 1px; clear: both; } a.NavToggle { position: absolute; top: 0; /* @noflip */ right: 3px; font-weight: normal; font-size: 90%; } #siteNotice, .site-notice { background-color: palegoldenrod; } #bs-nav-sections > div, #bs-left-column #bs-nav-sections.ui-tabs div.ui-tabs-panel { background: #eee; padding-left: 5px; } #clickableAwesomeFont { cursor: pointer } .select.table-autofilter { display: none } /* * This combined file was created by the DataTables downloader builder: * https://datatables.net/download * * To rebuild or modify this file with the latest versions of the included * software please visit: * https://datatables.net/download/#dt/dt-1.10.18 * * Included libraries: * DataTables 1.10.18 */ /* * Table styles */ table.dataTable { width: 100%; margin: 0 auto; clear: both; border-collapse: separate; border-spacing: 0; /* * Header and footer styles */ /* * Body styles */ } table.dataTable thead th, table.dataTable tfoot th { font-weight: bold; } table.dataTable thead th, table.dataTable thead td { padding: 10px 18px; border-bottom: 1px solid #111; } table.dataTable thead th:active, table.dataTable thead td:active { outline: none; } table.dataTable tfoot th, table.dataTable tfoot td { padding: 10px 18px 6px 18px; border-top: 1px solid #111; } table.dataTable thead .sorting, table.dataTable thead .sorting_asc, table.dataTable thead .sorting_desc, table.dataTable thead .sorting_asc_disabled, table.dataTable thead .sorting_desc_disabled { cursor: pointer; *cursor: hand; background-repeat: no-repeat; background-position: center right; } table.dataTable thead .sorting { background-image: url("DataTables-1.10.18/images/sort_both.png"); } table.dataTable thead .sorting_asc { background-image: url("DataTables-1.10.18/images/sort_asc.png"); } table.dataTable thead .sorting_desc { background-image: url("DataTables-1.10.18/images/sort_desc.png"); } table.dataTable thead .sorting_asc_disabled { background-image: url("DataTables-1.10.18/images/sort_asc_disabled.png"); } table.dataTable thead .sorting_desc_disabled { background-image: url("DataTables-1.10.18/images/sort_desc_disabled.png"); } table.dataTable tbody tr { background-color: #ffffff; } table.dataTable tbody tr.selected { background-color: #B0BED9; } table.dataTable tbody th, table.dataTable tbody td { padding: 8px 10px; } table.dataTable.row-border tbody th, table.dataTable.row-border tbody td, table.dataTable.display tbody th, table.dataTable.display tbody td { border-top: 1px solid #ddd; } table.dataTable.row-border tbody tr:first-child th, table.dataTable.row-border tbody tr:first-child td, table.dataTable.display tbody tr:first-child th, table.dataTable.display tbody tr:first-child td { border-top: none; } table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td { border-top: 1px solid #ddd; border-right: 1px solid #ddd; } table.dataTable.cell-border tbody tr th:first-child, table.dataTable.cell-border tbody tr td:first-child { border-left: 1px solid #ddd; } table.dataTable.cell-border tbody tr:first-child th, table.dataTable.cell-border tbody tr:first-child td { border-top: none; } table.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd { background-color: #f9f9f9; } table.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected { background-color: #acbad4; } table.dataTable.hover tbody tr:hover, table.dataTable.display tbody tr:hover { background-color: #f6f6f6; } table.dataTable.hover tbody tr:hover.selected, table.dataTable.display tbody tr:hover.selected { background-color: #aab7d1; } table.dataTable.order-column tbody tr > .sorting_1, table.dataTable.order-column tbody tr > .sorting_2, table.dataTable.order-column tbody tr > .sorting_3, table.dataTable.display tbody tr > .sorting_1, table.dataTable.display tbody tr > .sorting_2, table.dataTable.display tbody tr > .sorting_3 { background-color: #fafafa; } table.dataTable.order-column tbody tr.selected > .sorting_1, table.dataTable.order-column tbody tr.selected > .sorting_2, table.dataTable.order-column tbody tr.selected > .sorting_3, table.dataTable.display tbody tr.selected > .sorting_1, table.dataTable.display tbody tr.selected > .sorting_2, table.dataTable.display tbody tr.selected > .sorting_3 { background-color: #acbad5; } table.dataTable.display tbody tr.odd > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd > .sorting_1 { background-color: #f1f1f1; } table.dataTable.display tbody tr.odd > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd > .sorting_2 { background-color: #f3f3f3; } table.dataTable.display tbody tr.odd > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd > .sorting_3 { background-color: whitesmoke; } table.dataTable.display tbody tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 { background-color: #a6b4cd; } table.dataTable.display tbody tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 { background-color: #a8b5cf; } table.dataTable.display tbody tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 { background-color: #a9b7d1; } table.dataTable.display tbody tr.even > .sorting_1, table.dataTable.order-column.stripe tbody tr.even > .sorting_1 { background-color: #fafafa; } table.dataTable.display tbody tr.even > .sorting_2, table.dataTable.order-column.stripe tbody tr.even > .sorting_2 { background-color: #fcfcfc; } table.dataTable.display tbody tr.even > .sorting_3, table.dataTable.order-column.stripe tbody tr.even > .sorting_3 { background-color: #fefefe; } table.dataTable.display tbody tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 { background-color: #acbad5; } table.dataTable.display tbody tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 { background-color: #aebcd6; } table.dataTable.display tbody tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 { background-color: #afbdd8; } table.dataTable.display tbody tr:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1 { background-color: #eaeaea; } table.dataTable.display tbody tr:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2 { background-color: #ececec; } table.dataTable.display tbody tr:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3 { background-color: #efefef; } table.dataTable.display tbody tr:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1 { background-color: #a2aec7; } table.dataTable.display tbody tr:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2 { background-color: #a3b0c9; } table.dataTable.display tbody tr:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3 { background-color: #a5b2cb; } table.dataTable.no-footer { border-bottom: 1px solid #111; } table.dataTable.nowrap th, table.dataTable.nowrap td { white-space: nowrap; } table.dataTable.compact thead th, table.dataTable.compact thead td { padding: 4px 17px 4px 4px; } table.dataTable.compact tfoot th, table.dataTable.compact tfoot td { padding: 4px; } table.dataTable.compact tbody th, table.dataTable.compact tbody td { padding: 4px; } table.dataTable th.dt-left, table.dataTable td.dt-left { text-align: left; } table.dataTable th.dt-center, table.dataTable td.dt-center, table.dataTable td.dataTables_empty { text-align: center; } table.dataTable th.dt-right, table.dataTable td.dt-right { text-align: right; } table.dataTable th.dt-justify, table.dataTable td.dt-justify { text-align: justify; } table.dataTable th.dt-nowrap, table.dataTable td.dt-nowrap { white-space: nowrap; } table.dataTable thead th.dt-head-left, table.dataTable thead td.dt-head-left, table.dataTable tfoot th.dt-head-left, table.dataTable tfoot td.dt-head-left { text-align: left; } table.dataTable thead th.dt-head-center, table.dataTable thead td.dt-head-center, table.dataTable tfoot th.dt-head-center, table.dataTable tfoot td.dt-head-center { text-align: center; } table.dataTable thead th.dt-head-right, table.dataTable thead td.dt-head-right, table.dataTable tfoot th.dt-head-right, table.dataTable tfoot td.dt-head-right { text-align: right; } table.dataTable thead th.dt-head-justify, table.dataTable thead td.dt-head-justify, table.dataTable tfoot th.dt-head-justify, table.dataTable tfoot td.dt-head-justify { text-align: justify; } table.dataTable thead th.dt-head-nowrap, table.dataTable thead td.dt-head-nowrap, table.dataTable tfoot th.dt-head-nowrap, table.dataTable tfoot td.dt-head-nowrap { white-space: nowrap; } table.dataTable tbody th.dt-body-left, table.dataTable tbody td.dt-body-left { text-align: left; } table.dataTable tbody th.dt-body-center, table.dataTable tbody td.dt-body-center { text-align: center; } table.dataTable tbody th.dt-body-right, table.dataTable tbody td.dt-body-right { text-align: right; } table.dataTable tbody th.dt-body-justify, table.dataTable tbody td.dt-body-justify { text-align: justify; } table.dataTable tbody th.dt-body-nowrap, table.dataTable tbody td.dt-body-nowrap { white-space: nowrap; } table.dataTable, table.dataTable th, table.dataTable td { box-sizing: content-box; } /* * Control feature layout */ .dataTables_wrapper { position: relative; clear: both; *zoom: 1; zoom: 1; } .dataTables_wrapper .dataTables_length { float: left; } .dataTables_wrapper .dataTables_filter { float: right; text-align: right; } .dataTables_wrapper .dataTables_filter input { margin-left: 0.5em; } .dataTables_wrapper .dataTables_info { clear: both; float: left; padding-top: 0.755em; } .dataTables_wrapper .dataTables_paginate { float: right; text-align: right; padding-top: 0.25em; } .dataTables_wrapper .dataTables_paginate .paginate_button { box-sizing: border-box; display: inline-block; min-width: 1.5em; padding: 0.5em 1em; margin-left: 2px; text-align: center; text-decoration: none !important; cursor: pointer; *cursor: hand; color: #333 !important; border: 1px solid transparent; border-radius: 2px; } .dataTables_wrapper .dataTables_paginate .paginate_button.current, .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover { color: #333 !important; border: 1px solid #979797; background-color: white; background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, white), color-stop(100%, #dcdcdc)); /* Chrome,Safari4+ */ background: -webkit-linear-gradient(top, white 0%, #dcdcdc 100%); /* Chrome10+,Safari5.1+ */ background: -moz-linear-gradient(top, white 0%, #dcdcdc 100%); /* FF3.6+ */ background: -ms-linear-gradient(top, white 0%, #dcdcdc 100%); /* IE10+ */ background: -o-linear-gradient(top, white 0%, #dcdcdc 100%); /* Opera 11.10+ */ background: linear-gradient(to bottom, white 0%, #dcdcdc 100%); /* W3C */ } .dataTables_wrapper .dataTables_paginate .paginate_button.disabled, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active { cursor: default; color: #666 !important; border: 1px solid transparent; background: transparent; box-shadow: none; } .dataTables_wrapper .dataTables_paginate .paginate_button:hover { color: white !important; border: 1px solid #111; background-color: #585858; background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111)); /* Chrome,Safari4+ */ background: -webkit-linear-gradient(top, #585858 0%, #111 100%); /* Chrome10+,Safari5.1+ */ background: -moz-linear-gradient(top, #585858 0%, #111 100%); /* FF3.6+ */ background: -ms-linear-gradient(top, #585858 0%, #111 100%); /* IE10+ */ background: -o-linear-gradient(top, #585858 0%, #111 100%); /* Opera 11.10+ */ background: linear-gradient(to bottom, #585858 0%, #111 100%); /* W3C */ } .dataTables_wrapper .dataTables_paginate .paginate_button:active { outline: none; background-color: #2b2b2b; background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c)); /* Chrome,Safari4+ */ background: -webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); /* Chrome10+,Safari5.1+ */ background: -moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); /* FF3.6+ */ background: -ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); /* IE10+ */ background: -o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); /* Opera 11.10+ */ background: linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%); /* W3C */ box-shadow: inset 0 0 3px #111; } .dataTables_wrapper .dataTables_paginate .ellipsis { padding: 0 1em; } .dataTables_wrapper .dataTables_processing { position: absolute; top: 50%; left: 50%; width: 100%; height: 40px; margin-left: -50%; margin-top: -25px; padding-top: 20px; text-align: center; font-size: 1.2em; background-color: white; background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0))); background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); } .dataTables_wrapper .dataTables_length, .dataTables_wrapper .dataTables_filter, .dataTables_wrapper .dataTables_info, .dataTables_wrapper .dataTables_processing, .dataTables_wrapper .dataTables_paginate { color: #333; } .dataTables_wrapper .dataTables_scroll { clear: both; } .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody { *margin-top: -1px; -webkit-overflow-scrolling: touch; } .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > th, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > td, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > th, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > td { vertical-align: middle; } .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > th > div.dataTables_sizing, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > td > div.dataTables_sizing, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > th > div.dataTables_sizing, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > td > div.dataTables_sizing { height: 0; overflow: hidden; margin: 0 !important; padding: 0 !important; } .dataTables_wrapper.no-footer .dataTables_scrollBody { border-bottom: 1px solid #111; } .dataTables_wrapper.no-footer div.dataTables_scrollHead table.dataTable, .dataTables_wrapper.no-footer div.dataTables_scrollBody > table { border-bottom: none; } .dataTables_wrapper:after { visibility: hidden; display: block; content: ""; clear: both; height: 0; } @media screen and (max-width: 767px) { .dataTables_wrapper .dataTables_info, .dataTables_wrapper .dataTables_paginate { float: none; text-align: center; } .dataTables_wrapper .dataTables_paginate { margin-top: 0.5em; } } @media screen and (max-width: 640px) { .dataTables_wrapper .dataTables_length, .dataTables_wrapper .dataTables_filter { float: none; text-align: center; } .dataTables_wrapper .dataTables_filter { margin-top: 0.5em; } } /* Default style for navigation boxes */ .navbox { /* Navbox container style */ box-sizing: border-box; border: 1px solid #a2a9b1; width: 100%; clear: both; font-size: 88%; text-align: center; padding: 1px; margin: 1em auto 0; /* Prevent preceding content from clinging to navboxes */ } .navbox .navbox { margin-top: 0; /* No top margin for nested navboxes */ } .navbox + .navbox { margin-top: -1px; /* Single pixel border between adjacent navboxes */ } .navbox-inner, .navbox-subgroup { width: 100%; } .navbox-group, .navbox-title, .navbox-abovebelow { padding: 0.25em 1em; /* Title, group and above/below styles */ line-height: 1.5em; text-align: center; } th.navbox-group { /* Group style */ white-space: nowrap; /* @noflip */ text-align: right; } .navbox, .navbox-subgroup { background-color: #fdfdfd; /* Background color */ } .navbox-list { line-height: 1.5em; border-color: #fdfdfd; /* Must match background color */ } /* cell spacing for navbox cells */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { /* Borders above 2nd, 3rd, etc. rows */ border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox th, .navbox-title { background-color: #ccccff; /* Level 1 color */ } .navbox-abovebelow, th.navbox-group, .navbox-subgroup .navbox-title { background-color: #bababa; /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background-color: #e6e6ff; /* Level 3 color */ } .navbox-even { background-color: #f7f7f7; /* Even row striping */ } .navbox-odd { background-color: transparent; /* Odd row striping */ } .navbox .hlist td dl, .navbox .hlist td ol, .navbox .hlist td ul, .navbox td.hlist dl, .navbox td.hlist ol, .navbox td.hlist ul { padding: 0.125em 0; /* Adjust hlist padding in navboxes */ } /* Default styling for Navbar template */ .navbar { display: inline; font-size: 88%; font-weight: normal; } .navbar ul { display: inline; white-space: nowrap; } .mw-body-content .navbar ul { line-height: inherit; } .navbar li { word-spacing: -0.125em; } .navbar.mini li abbr[title] { font-variant: small-caps; border-bottom: none; text-decoration: none; cursor: inherit; } /* Navbar styling when nested in infobox and navbox */ .infobox .navbar { font-size: 100%; } .navbox .navbar { display: block; font-size: 100%; } .navbox-title .navbar { /* @noflip */ float: left; /* @noflip */ text-align: left; /* @noflip */ margin-right: 0.5em; } /* Styling for JQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle { font-weight: normal; /* @noflip */ text-align: right; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; /* @noflip */ text-align: left; } /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; } .infobox caption { font-size: 125%; font-weight: bold; padding: 0.2em; text-align: center; } .infobox td, .infobox th { vertical-align: top; /* @noflip */ text-align: left; } .infobox.bordered { border-collapse: collapse; } .infobox.bordered td, .infobox.bordered th { border: 1px solid #a2a9b1; } .infobox.bordered .borderless td, .infobox.bordered .borderless th { border: 0; } .infobox.sisterproject { width: 20em; font-size: 90%; } .infobox.standard-talk { border: 1px solid #c0c090; background-color: #f8eaba; } .infobox.standard-talk.bordered td, .infobox.standard-talk.bordered th { border: 1px solid #c0c090; } /* styles for bordered infobox with merged rows */ .infobox.bordered .mergedtoprow td, .infobox.bordered .mergedtoprow th { border: 0; border-top: 1px solid #a2a9b1; /* @noflip */ border-right: 1px solid #a2a9b1; } .infobox.bordered .mergedrow td, .infobox.bordered .mergedrow th { border: 0; /* @noflip */ border-right: 1px solid #a2a9b1; } /* Styles for geography infoboxes, eg countries, country subdivisions, cities, etc. */ .infobox.geography { border-collapse: collapse; line-height: 1.2em; font-size: 90%; } .infobox.geography td, .infobox.geography th { border-top: 1px solid #a2a9b1; padding: 0.4em 0.6em 0.4em 0.6em; } .infobox.geography .mergedtoprow td, .infobox.geography .mergedtoprow th { border-top: 1px solid #a2a9b1; padding: 0.4em 0.6em 0.2em 0.6em; } .infobox.geography .mergedrow td, .infobox.geography .mergedrow th { border: 0; padding: 0 0.6em 0.2em 0.6em; } .infobox.geography .mergedbottomrow td, .infobox.geography .mergedbottomrow th { border-top: 0; border-bottom: 1px solid #a2a9b1; padding: 0 0.6em 0.4em 0.6em; } .infobox.geography .maptable td, .infobox.geography .maptable th { border: 0; padding: 0; } span.HQ_Bar a { color: white; } .mw-collapsible .mw-collapsible-toggle { float:left; margin-left:0; margin-right:1em; } .mw-collapsible span.mw-collapsible-toggle { float:left; font-size: 147%; margin-top:1.5em; } #footer a, #footer a:hover { color: #494949; text-decoration: underline; font-weight: bold; }
common.js (talk) (Translate) /* Any JavaScript here will be loaded for all users on every page load. */
// Local script url mw.loader.load( '/index.php?title=MediaWiki:SortTableFilter.js&action=raw&ctype=text/javascript' ); // Local script url mw.loader.load( '/index.php?title=MediaWiki:sortabletable.js&action=raw&ctype=text/javascript' ); // Local script url mw.loader.load( '/index.php?title=MediaWiki:Tablefilter.js&action=raw&ctype=text/javascript' ); // Local script url mw.loader.load( '/index.php?title=MediaWiki:FilterTable.js&action=raw&ctype=text/javascript' ); // Local script url mw.loader.load( '/index.php?title=MediaWiki:Datatables.js&action=raw&ctype=text/javascript' ); /** * Footenote tooltips from <references> * @description Footnotes as unformatted tooltip - from it.wikipedia.org under same license * Note (2015-12-21 14:19:20): Use of 'addOnloadHook' is deprecated. Use jQuery instead. * @returns {undefined} */ window.reference_footnote_tooltips = function () { var sups = document.getElementsByTagName('sup'); for (var i=0; i < sups.length; i++) { var note_id = sups[i].childNodes[0].href; if (note_id && (note_id.indexOf('#') !== -1)) { note_id = document.getElementById(note_id.substr(note_id.indexOf('#')+1)); if (note_id) { if (document.all) { sups[i].title = note_id.innerText; sups[i].childNodes[0].title = note_id.innerText; } else { sups[i].title = note_id.textContent; } } } } }; /** * @namespace resource string dictionary * * Note: Commons uses collapse/expand ▲/▼, but this looks better in strict box * layouts that in the free-wrapping key statements * * Nomenclature proposal: if an extra plugin is used, strings can be designated as * “plugin_toolTipSomthing” otherwise just “toolTipSomthing” (global string). So it’s more clear if * somebody wants to deactivate a plugin and remove strings from the resource dictionary. * @augments $ * @type object */ $.jI18n = { en: { ClueTip_newWindow : '(New Window …)', ClueTip_toolTipClose : 'Click to close', ClueTip_toolTipNewWindow : '(click to open content in a new window or tab)', ClueTip_toolTipNoContentLoadable:'<i>No content could be loaded</i>', CollapseBox_captionCollapse : ' (show less) ', CollapseBox_captionExpand : ' (more...) ', CollapseBox_toolTipCollapse : '(click to hide information below)', CollapseBox_toolTipExpand : '(click to show more information below)', HeadingLink_toolTipHeadingLink: 'Click to show (permanent) link to this headline', // MediaWiki:Gadget-HeadingLink HeadingLink_toolTipHeadingLinkHelp: '(1) Normal link to this head line or (2) the permanent link with version number:',// MediaWiki:Gadget-HeadingLink ImageZoom1st_iconCloseWindow : 'https://upload.wikimedia.org/wikipedia/commons/8/87/Close_icon_default.jpg', ImageZoom1st_iconCloseWindowHover : 'https://upload.wikimedia.org/wikipedia/commons/d/d0/Close_icon_hover.jpg', ImageZoom1st_imageMetadataLink : '(Information about Creator, License and Copyright)', ImageZoom1st_toolTipImageZooming : 'Images can be enlarged by clicking on it', ImageZoom1st_zoomNotPossible : '(This image can not be further enlarged)', // see MediaWiki:Jquery.zoomImage.js ImageZoom2nd_iconMagnifier: 'https://species-id.net/o/media/f/f7/Iviewer.zoom_in.gif', ImageZoom2nd_iconMagnifierHover: 'https://species-id.net/o/media/5/5c/Iviewer.zoom_out.gif', ImageZoom2nd_iconLoader: 'https://upload.wikimedia.org/wikipedia/commons/d/de/Ajax-loader.gif', ImageZoom2nd_toolTipLoad : '(click to load largest available image; this may take considerable time to load)', ImageZoom2nd_textZoomOrig: 'Zooming facility', MoveTOC_toolTipFloatleft : 'floating on the left side', MoveTOC_toolTipFloatright: 'floating on the right side', MoveTOC_toolTipNavigatePagetop : 'Top of page', MoveTOC_toolTipUnfloat: 'back to default position', // see MediaWiki:jKey.js jKey_expandAll : 'Show all extras', jKey_iconOverview : 'https://upload.wikimedia.org/wikipedia/commons/thumb/2/22/View-pause_Gion_simple.svg/20px-View-pause_Gion_simple.svg.png', jKey_iconResume : 'https://upload.wikimedia.org/wikipedia/commons/thumb/4/49/View-playback_Gion_simple.svg/20px-View-playback_Gion_simple.svg.png', jKey_iconStart1st : 'https://upload.wikimedia.org/wikipedia/commons/thumb/4/49/View-playback_Gion_simple.svg/20px-View-playback_Gion_simple.svg.png', jKey_iconStartNew : 'https://upload.wikimedia.org/wikipedia/commons/thumb/0/05/View-refresh_Gion_simple.svg/20px-View-refresh_Gion_simple.svg.png' }, de: { ClueTip_newWindow : '(Neues Fenster …)', ClueTip_toolTipClose : 'Zum Schließen klicken', ClueTip_toolTipNewWindow : '(klicken um Inhalt in neuem Fenster oder Reiter zu öffnen)', ClueTip_toolTipNoContentLoadable:'<i>Leider konnte der Inhalt nicht geladen werden.</i>', CollapseBox_captionCollapse : ' (weniger anzeigen) ', CollapseBox_captionExpand : ' (mehr...) ', CollapseBox_toolTipCollapse : '(klicken um Zusatzinformationen zu verbergen)', CollapseBox_toolTipExpand : '(klicken um Zusatzinformationen anzuzeigen)', HeadingLink_toolTipHeadingLink: 'Klicken um (permanenten) Link dieser Überschrift anzuzeigen',// MediaWiki:Gadget-HeadingLink HeadingLink_toolTipHeadingLinkHelp: '(1) Link zu dieser Überschrift oder (2) Link mit Versionsnummer:',// MediaWiki:Gadget-HeadingLink ImageZoom1st_imageMetadataLink : '(Informationen zu Autor, Lizenz und Copyright)', ImageZoom1st_toolTipImageZooming : 'Bilder können durch Anklicken vergrößert betrachtet werden', ImageZoom1st_zoomNotPossible : '(Dieses Bild kann nicht weiter vergrößert werden)', // see MediaWiki:zoomImage.js ImageZoom2nd_toolTipLoad : '(klicken um Originalbild nachzuladen; bei großen Bildern kann dies u. U. langsam sein)', ImageZoom2nd_textZoomOrig: 'Vergrößerungsfunktion', MoveTOC_toolTipFloatleft : 'Links schwebend', MoveTOC_toolTipFloatright: 'Rechts schwebend', MoveTOC_toolTipNavigatePagetop : 'Zum Seitenanfang', MoveTOC_toolTipUnfloat: 'Zurück zur Normalposition', jKey_expandAll : 'Alle Zusatzinformationen zeigen' }, it: { ClueTip_toolTipClose : 'Clicca per chiudere', CollapseBox_captionCollapse : ' (mostra di meno) ', CollapseBox_captionExpand : ' (più...) ', ImageZoom1st_imageMetadataLink : '(Informazione sull’Autore, Licenza e Copyright)', ImageZoom1st_toolTipImageZooming : 'Le immagini possono essere ingrandite cliccandoci sopra', ImageZoom1st_zoomNotPossible : '(Al momento non è possibilie ingrandire questa immagine)', // TODO translation see en version jKey_expandAll : 'Mostra tutti informazione' //REVISE } }; /** * @description Get resource string (text, image URLs) for a given language, based on a string-key * If no resource is defined in a given language for a resource key, the resource for 'en' will be returned, * if this is missing as well an error message. * @augments $ * @requires mw.config for getting global variables * @param {string} resourceKey key for the resource * @returns {String} */ $.resource = function (resourceKey) { var lang = mw.config.get('wgUserLanguage').split('-')[0]; // language: 'pt-BR', 'de-formal', etc. return ($.jI18n[lang] && $.jI18n[lang][resourceKey] ? $.jI18n[lang][resourceKey] : ($.jI18n.en[resourceKey]) ? $.jI18n.en[resourceKey] : 'MISSING RESOURCE: no $.jI18n.en.' + resourceKey + ' defined.'); }; /** * @description Create html string for link with image and/or text content * @requires $.resource() * @param {string} txtResourceKey resource keys (multilingual {@link $.resource()} * @param {html} txtContent displayed content of a link * @param {url} href * @param {string} attributes string of combined other attributes of link element; must use ' as inner quotes, and \" inside event functions * @returns {@exp;txtResourceKey@pro;length|String|@exp;txtContent@pro;length@exp;txtResourceKey@pro;length} */ $.linkBuilder = function (txtResourceKey, txtContent, href, attributes) { return (txtResourceKey.length ? '<a ' + ' href="' + href + '"' + ' ' + (attributes.length ? attributes : '') + '>' + $.resource(txtResourceKey) + '</a>' : (txtContent.length ? '<a ' + ' href="' + href + '" ' + ' ' + (attributes.length ? attributes : '') + '>' + txtContent + '</a>' : '') ); }; /** * * @param {string} imgResourceKey resource key {@link $.resource()} * @param {string} txtResourceKey resource key {@link $.resource()} * @param {string} attributes HTML * @requiers: $.linkBuilder * @returns {String} */ $.imglinkBuilder = function (imgResourceKey, txtResourceKey, attributes) { return (imgResourceKey.length ? '<a ' + ' href="#"' + (attributes.length ? ' ' + attributes : '') + '><img src="' + $.resource(imgResourceKey) + '" /></a> ' : '') + $.linkBuilder(txtResourceKey, '', '#', attributes); }; /** * @description return a random integer * @param {integer} min * @param {integer} max * @returns {@exp;@call;parseInt} */ $.random = function (min, max) { // NO CHECKS: if(min>max) {return -1;} if(min==max) {return min;} return (min + parseInt(Math.random() * (max - min + 1), 10)); }; /////////////////////// // Highlight targets // /////////////////////// /* Description: Highlight all targets of page-internal links; generic function but * especially useful in long internally linked tables like identification keys (see Template:Key_Start) * NOTE: background-color animation is not easliy done by jQuery it needs either UI or a colorplugin */ /** * @description Highlight a single element that is target of the link-object caller (e.g. <a href=...>) * * @requires resetHighlight() * @requires $.jqueryEscapeId() * @param {type} caller * @returns {undefined} */ window.highlightTarget = function (caller) { var target = $($.jqueryEscapeId(caller.hash)); // hash could be 'a.34:', jquery needs 'a\.34\:' if (target.length) { var tStyle = target.get(0).style, resetString = 'resetHighlight("' + caller.hash + '","' + tStyle.backgroundColor + '","' + tStyle.textDecoration + '")"'; tStyle.backgroundColor = '#EAEAEA'; window.setTimeout(resetString, 2000); } }; /** * @description Stop highlighting * @requires highlightTarget() * @requires $.jqueryEscapeId() * @param {string} hash ID of the target, could be 'a.34:' * @param {string} backColor background color * @param {string} txtDeco CSS style text decoration * @returns {undefined} */ window.resetHighlight = function (hash, backColor, txtDeco) { if (hash) { // reset var tStyle = $($.jqueryEscapeId(hash)).get(0).style; tStyle.backgroundColor = backColor; tStyle.textDecoration = (txtDeco === '') ? 'none' : txtDeco; } }; /** * @description Add onclick events to all page-internal links * * @requires resetHighlight() * @requires highlightTarget() * @requires $.jqueryEscapeId() * @returns {undefined} */ window.initTargetHighlighting = function () { for (var i=0, max=document.links.length; i < max; i++) { var lnk = document.links[i]; if ((lnk.pathname === location.pathname) && lnk.hash.length > 1) { // page internal link; exluding single '#' lnk.onclick = function() { highlightTarget(this); }; } } }; /** * @description collapse all collapsible key tables on wiki page * using the MediaWiki mw-customtoggle mechanism on all CSS class of * class="decisiontree" * Toggle all * * $('.decisiontree').each (function (i, element) { $(element).find('.mw-customtoggle.is-collapsed').trigger('click') }); * $('.decisiontree').each (function (i, element) { $(element).find('.mw-customtoggle').not('.is-collapsed').trigger('click') }); * @requires MediaWiki:JKey.js * @param {boolean} shallExpandThisKey * @param {selector} caller * @returns {undefined} */ $.toggleAllCollapsible = function (shallExpandThisKey, caller) { var $decisionTree = $(caller).closest('.decisiontree'); // debug log messages if ($decisionTree.length) { if(shallExpandThisKey) { $decisionTree.each (function (i, element) { $(element).find('.mw-customtoggle.is-collapsed').trigger('click'); }); } else { $decisionTree.each (function (i, element) { $(element).find('.mw-customtoggle').not('.is-collapsed').trigger('click'); }); } } };// $.toggleAllCollapsible() //////////////////////////////////// // Cluetip hover and click popups // //////////////////////////////////// /** * @description Utility for Cluetip, Modal layer, Image Zoom: * Create appendable jquery object, fnAction = function bound to click. * NOTE All functions called within createButton() should return false * to prevent appending a # to the URL from clicking <a href='#'></a> * @param {string} kindOfButton type of button ('zoomImg', 'close') * @param {function} fnAction function to bind on that link * @returns {@exp;@exp;@call;$@pro;append@pro;h@call;over@call;@call;click|@exp;@call;$@pro;append@pro;h@call;over@call;@call;click} */ window.createButton = function (kindOfButton, fnAction) { switch (kindOfButton) { case 'zoomImg': return $('<a href="#" title="' + $.resource('ImageZoom2nd_toolTipLoad') + '" />') .append( '<img src="'+$.resource('ImageZoom2nd_iconMagnifier')+'" align="middle" style="border:1px solid gray;">' + '<span style="position:absolute;left:20px;top:0px;white-space:nowrap;">'+$.resource('ImageZoom2nd_textZoomOrig')+'</span>' ) // text after img seems to be inline only with position:absolute .hover( function() { $(this).find('img:first').attr({src: $.resource('ImageZoom2nd_iconMagnifierHover'), style :'border:1px solid black;'}); }, function() { $(this).find('img:first').attr({src: $.resource('ImageZoom2nd_iconMagnifier'), style :'border:1px solid gray;'}); }) .click(fnAction); // break; // return before case 'close': default: return $('<a href="#" title="' + $.resource('ClueTip_toolTipClose') + '"/>') .append('<img src="'+$.resource('ImageZoom1st_iconCloseWindow') + '" />') .hover( function() { $(this).find('img:first').attr('src', $.resource('ImageZoom1st_iconCloseWindowHover')); }, function() { $(this).find('img:first').attr('src', $.resource('ImageZoom1st_iconCloseWindow')); }) .click(fnAction); }// end switch case }; /////////////////////////////// // HoverIntent START /** * @description hoverIntent is a plug-in that attempts to determine the user's intent * see https://offene-naturfuehrer.de/wiki/MediaWiki:HoverIntent.js for docu, creators and license * @augments $.fn * @requires jQuery 1.1.2+ * @param {handler} f handler in * @param {handler} g handler out * @returns {@exp;@call;@call;mouseout} */ $.fn.hoverIntent = function(f,g) { var cfg = { // default configuration options: Cluetip overrides! sensitivity: 4, // mouseover is called if mouse is moved less pixels; default 7. Cluetip overrides! interval: 250, // comparison interval, also influences initial delay until detected; default 100. timeout: 0 }; cfg = $.extend(cfg, g ? {over:f, out:g} : f ); // override options with user-supplied object // current and previous X/Y position of mouse var cX, cY, pX, pY; // private function for getting mouse position var track = function(ev) { cX = ev.pageX; cY = ev.pageY; }; // private function comparing current and previous mouse position var compare = function(ev,ob) { ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); // compare mouse positions to see if they've crossed the threshold if ( ( Math.abs(pX-cX) + Math.abs(pY-cY) ) < cfg.sensitivity ) { $(ob).unbind('mousemove',track); // set hoverIntent state to true (so mouseOut can be called) ob.hoverIntent_s = 1; return cfg.over.apply(ob,[ev]); } else { // set previous coordinates for next time pX = cX; pY = cY; // use self-calling timeout, guarantees intervals are spaced out properly (avoids JavaScript timer bugs) ob.hoverIntent_t = setTimeout( function(){compare(ev, ob);} , cfg.interval ); } }; // private function delaying the mouseOut function var delay = function(ev,ob) { ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); ob.hoverIntent_s = 0; return cfg.out.apply(ob,[ev]); }; // private function handling mouseover AND mouseout var handleHover = function(e) { // next three lines from jQuery.hover: ignore children onMouseOver/onMouseOut var p = (e.type == 'mouseover' ? e.fromElement : e.toElement) || e.relatedTarget; while ( p && p != this ) { try { p = p.parentNode; } catch(err) { p = this; } } if ( p == this ) { return false; } // copy objects to be passed into t (required for event object to be passed in IE) var ev = $.extend({},e); var ob = this; // cancel hoverIntent timer if it exists if (ob.hoverIntent_t) { ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); } // else e.type == "onmouseover" if (e.type == 'mouseover') { pX = ev.pageX; pY = ev.pageY; // set previous X/Y pos based on initial entry point $(ob).bind('mousemove',track); // update current X/Y pos based on mousemove // start polling interval (self-calling timeout) to compare mouse coordinates over time if (ob.hoverIntent_s != 1) { ob.hoverIntent_t = setTimeout( function(){compare(ev,ob);} , cfg.interval );} // else e.type == "onmouseout" } else { // unbind expensive mousemove event $(ob).unbind('mousemove',track); // if hoverIntent state is true, then call the mouseOut function after the specified delay if (ob.hoverIntent_s == 1) { ob.hoverIntent_t = setTimeout( function(){delay(ev,ob);} , cfg.timeout );} } }; // bind functions to event listeners return this.mouseover(handleHover).mouseout(handleHover); }; // HoverIntent END ////////////////////////////////////////////////// // Modified Cluetip Plugin /** * @description Cluetip Plugin (modified) * MIT and GPL licenses * http://plugins.learningjquery.com/cluetip/ and https://www.offene-naturfuehrer.de/wiki/MediaWiki:Cluetip.js for details * @version 1.0.6 modified for Off.Naturführer. * @requires jQuery * @requires $.jqueryEscapeId() * @requires createButton() * @augments object $.fn * @returns {undefined} */ (function($) { $.cluetip = {version: '1.0.6-ON'}; var $cluetip, $cluetipInner, $cluetipOuter, $cluetipTitle, $cluetipArrows, $cluetipWait, $dropShadow, imgCount, insertionElement = 'body'; $.fn.cluetip = function(js, options) { if (typeof js == 'object') { options = js; js = null; } if (js == 'destroy') { return this.removeData('thisInfo').unbind('.cluetip'); } return this.each(function(index) { var link=this, $this=$(this); // support metadata plugin (v1.0 and 2.0) var opts = $.extend( true, {}, $.fn.cluetip.defaults, options || {}, $.metadata ? $this.metadata() : ( $.meta ? $this.data() : {} ) ); // start out with no contents (for ajax activation) var cluetipContents = false; var cluezIndex = +opts.cluezIndex; $this.data('thisInfo', {title: link.title, zIndex: cluezIndex}); var isActive = false, closeOnDelay = 0; // create the cluetip divs if (!$('#cluetip').length) { $(['<div id="cluetip">', '<div id="cluetip-outer">', '<h3 id="cluetip-title"></h3>', '<div id="cluetip-inner"></div>', '</div>', '<div id="cluetip-extra"></div>', '<div id="cluetip-arrows" class="cluetip-arrows"></div>', '</div>'].join('')) .appendTo(insertionElement).hide(); $cluetip = $('#cluetip').css({position: 'absolute'}); $cluetipOuter = $('#cluetip-outer').css({position: 'relative', zIndex: cluezIndex}); $cluetipInner = $('#cluetip-inner'); $cluetipTitle = $('#cluetip-title'); $cluetipArrows = $('#cluetip-arrows'); $cluetipWait = $('<div id="cluetip-waitimage"></div>') .css({position: 'absolute'}).insertBefore($cluetip).hide(); } var dropShadowSteps = (opts.dropShadow) ? +opts.dropShadowSteps : 0; if (!$dropShadow) { $dropShadow = $([]); for (var i=0; i < dropShadowSteps; i++) { $dropShadow = $dropShadow.add($('<div></div>').css({zIndex: cluezIndex-1, opacity:0.1, top: 1+i, left: 1+i})); } $dropShadow.css({position: 'absolute', backgroundColor: '#000'}) .prependTo($cluetip); } var tipAttribute = $this.attr(opts.attribute); if (!tipAttribute && !opts.splitTitle && !js) { return true; } // if hideLocal is set to true, on DOM ready hide the local content that will be displayed in the clueTip if (opts.local && opts.localPrefix) {tipAttribute = opts.localPrefix + tipAttribute;} if (opts.local && opts.hideLocal) { $(tipAttribute + ':first').hide(); } var tOffset = parseInt(opts.topOffset, 10), lOffset = parseInt(opts.leftOffset, 10); // vertical measurement variables var tipHeight, wHeight, sTop, linkTop, posY, tipY, mouseY, baseline, defHeight = isNaN(parseInt(opts.height, 10)) ? 'auto' : (/\D/g).test(opts.height) ? opts.height : opts.height + 'px'; // horizontal measurement variables var tipInnerWidth = parseInt(opts.width, 10) || 275, tipWidth = tipInnerWidth + (parseInt($cluetip.css('paddingLeft'),10)||0) + (parseInt($cluetip.css('paddingRight'),10)||0) + dropShadowSteps, linkWidth = this.offsetWidth, linkLeft, posX, mouseX, winWidth; // parse the title var tipParts; var tipTitle = (opts.attribute != 'title') ? $this.attr(opts.titleAttribute) : ''; if (opts.splitTitle) { if (tipTitle === undefined) {tipTitle = '';} tipParts = tipTitle.split(opts.splitTitle); tipTitle = tipParts.shift(); } if (opts.escapeTitle) { tipTitle = tipTitle.replace(/&/g,'&').replace(/>/g,'>').replace(/</g,'<'); } function returnFalse() { return false; } //activate clueTip var activate = function(event) { var pY; if (!opts.onActivate($this)) { return false; } isActive = true; $cluetip.removeClass().css({width: tipInnerWidth}); if (tipAttribute == $this.attr('href')) { $this.css('cursor', opts.cursor); } if (opts.hoverClass) { $this.addClass(opts.hoverClass); } linkTop = posY = $this.offset().top; linkLeft = $this.offset().left; mouseX = event.pageX; mouseY = event.pageY; if (link.tagName.toLowerCase() != 'area') { sTop = $(document).scrollTop(); winWidth = $(window).width(); } // position clueTip horizontally if (opts.positionBy == 'fixed') { posX = linkWidth + linkLeft + lOffset; $cluetip.css({left: posX}); } else { posX = (linkWidth > linkLeft && linkLeft > tipWidth) || linkLeft + linkWidth + tipWidth + lOffset > winWidth ? linkLeft - tipWidth - lOffset : linkWidth + linkLeft + lOffset; if (link.tagName.toLowerCase() == 'area' || opts.positionBy == 'mouse' || linkWidth + tipWidth > winWidth) { // position by mouse if (mouseX + 20 + tipWidth > winWidth) { $cluetip.addClass(' cluetip-jtip'); posX = (mouseX - tipWidth - lOffset) >= 0 ? mouseX - tipWidth - lOffset - parseInt($cluetip.css('marginLeft'),10) + parseInt($cluetipInner.css('marginRight'),10) : mouseX - (tipWidth/2); } else { posX = mouseX + lOffset; } } pY = posX < 0 ? event.pageY + tOffset : event.pageY; $cluetip.css({ left: (posX > 0 && opts.positionBy != 'bottomTop') ? posX : (mouseX + (tipWidth/2) > winWidth) ? winWidth/2 - tipWidth/2 : Math.max(mouseX - (tipWidth/2),0), zIndex: $this.data('thisInfo').zIndex }); $cluetipArrows.css({zIndex: $this.data('thisInfo').zIndex+1}); } wHeight = $(window).height(); // load a string from cluetip method's first argument if (js) { if (typeof js == 'function') { js = js.call(link); } $cluetipInner.html(js); cluetipShow(pY); } // load the title attribute only (or user-selected attribute). // clueTip title is string before 1st delimiter, subsequent delim place clueTip body text on separate lines else if (tipParts) { var tpl = tipParts.length; $cluetipInner.html(tpl ? tipParts[0] : ''); if (tpl > 1) { for (var i=1; i < tpl; i++){ $cluetipInner.append('<div class="split-body">' + tipParts[i] + '</div>'); } } cluetipShow(pY); } // load external file via ajax else if (!opts.local && tipAttribute.indexOf('#') !== 0) { if (/\.(jpe?g|tiff?|gif|png)$/i.test(tipAttribute)) { $cluetipInner.html('<img src="' + tipAttribute + '" alt="' + tipTitle + '" />'); cluetipShow(pY); } else if (cluetipContents && opts.ajaxCache) { $cluetipInner.html(cluetipContents); // highlight target having a <span id=".."> see also ajaxSettings success: var idTarget = link.toString().split('#')[1]; if(idTarget!=undefined){ $cluetipInner.find($.jqueryEscapeId('#'+idTarget)).addClass('alert'); } cluetipShow(pY); } else { var optionBeforeSend = opts.ajaxSettings.beforeSend, optionError = opts.ajaxSettings.error, optionSuccess = opts.ajaxSettings.success, optionComplete = opts.ajaxSettings.complete; var ajaxSettings = { cache: false, // force requested page not to be cached by browser url: tipAttribute, beforeSend: function(xhr) { if (optionBeforeSend) {optionBeforeSend.call(link, xhr, $cluetip, $cluetipInner);} $cluetipOuter.children().empty(); $cluetipWait.css({top: mouseY+20, left: mouseX+20, zIndex: $this.data('thisInfo').zIndex-1}).show(); }, error: function(xhr, textStatus) { if (isActive) { if (optionError) { optionError.call(link, xhr, textStatus, $cluetip, $cluetipInner); } else { $cluetipInner.html($.resource('ClueTip_toolTipNoContentLoadable')); } } }, success: function(data, textStatus) { cluetipContents = opts.ajaxProcess.call(link, data); if (isActive) { if (optionSuccess) {optionSuccess.call(link, data, textStatus, $cluetip, $cluetipInner);} $cluetipInner.html(cluetipContents); // highlight target having a <span id=".."> var idTarget = link.toString().split('#')[1]; if(idTarget!=undefined){ $cluetipInner.find($.jqueryEscapeId('#'+idTarget)).addClass('alert'); } } }, complete: function(xhr, textStatus) { if (optionComplete) {optionComplete.call(link, xhr, textStatus, $cluetip, $cluetipInner);} imgCount = $('#cluetip-inner img').length; if (imgCount && navigator.userAgent.toUpperCase().indexOf('OPERA') ===-1 ) { $('#cluetip-inner img').bind('load error', function() { imgCount--; if (imgCount<1) { $cluetipWait.hide(); if (isActive) { cluetipShow(pY); } } }); } else { $cluetipWait.hide(); if (isActive) { cluetipShow(pY); } } } }; var ajaxMergedSettings = $.extend(true, {}, opts.ajaxSettings, ajaxSettings); $.ajax(ajaxMergedSettings); } // load an element from the same page } else if (opts.local) { var $localContent = $(tipAttribute + (/#\S+$/.test(tipAttribute) ? '' : ':eq(' + index + ')')).clone(true).show(); $cluetipInner.html($localContent); cluetipShow(pY); } }; // get dimensions and options for cluetip and prepare it to be shown var cluetipShow = function(bpY) { $cluetip.addClass('cluetip-jtip'); if (opts.truncate) { var $truncloaded = $cluetipInner.text().slice(0,opts.truncate) + '...'; $cluetipInner.html($truncloaded); } if (opts.showTitle) { $cluetipTitle.show().html(tipTitle ? tipTitle : ' '); } else { $cluetipTitle.hide(); } // INSERTED CODE: get href (= real wiki page link) and add as link in title ("(New Window)"). Cluetip now on link itself! // Not found how to get access in onShow() to "this"; thus inserted here. $cluetipTitle.prepend('<a href="' + $this.attr('href') + '" target="_blank" title="' + $.resource('ClueTip_toolTipNewWindow') +'" >' + $.resource('ClueTip_newWindow') + '</a>').show(); if (opts.sticky) { // Close text modified directly var $closeLink = $('<div id="cluetip-close"/>').append(createButton('close', function() {cluetipClose();return false;})); if(opts.closePosition == 'bottom') { $closeLink.appendTo($cluetipInner); } else if(opts.closePosition == 'title'){ $closeLink.prependTo($cluetipTitle); } else { $closeLink.prependTo($cluetipInner); } if (opts.mouseOutClose) { $cluetip.bind('mouseleave.cluetip', function() {cluetipClose();}); } else { $cluetip.unbind('mouseleave.cluetip'); } } // now that content is loaded, finish the positioning var direction = ''; $cluetipOuter.css({zIndex: $this.data('thisInfo').zIndex, overflow: defHeight == 'auto' ? 'visible' : 'auto'}); tipHeight = defHeight == 'auto' ? Math.max($cluetip.outerHeight(),$cluetip.height()) : parseInt(defHeight,10); $cluetipInner.css({ overflow: defHeight == 'auto' ? 'visible' : 'auto', height: tipHeight - 45 //minus title: should be set automatically but $cluetipTitle.height() and height variants always get 0 or 0px }); tipY = posY; baseline = sTop + wHeight; if (opts.positionBy == 'fixed') { tipY = posY - opts.dropShadowSteps + tOffset; } else if ( (posX < mouseX && Math.max(posX, 0) + tipWidth > mouseX) || opts.positionBy == 'bottomTop') { if (posY + tipHeight + tOffset > baseline && mouseY - sTop > tipHeight + tOffset) { tipY = mouseY - tipHeight - tOffset; direction = 'top'; } else { tipY = mouseY + tOffset; direction = 'bottom'; } } else if ( posY + tipHeight + tOffset > baseline ) { tipY = (tipHeight >= wHeight) ? sTop : baseline - tipHeight - tOffset; } else if ($this.css('display') == 'block' || link.tagName.toLowerCase() == 'area' || opts.positionBy == 'mouse') { tipY = bpY - tOffset; } else { tipY = posY - opts.dropShadowSteps; } if (direction == '') { direction = (posX < linkLeft) ? 'left' : 'right'; } $cluetip.css({top: tipY + 'px'}).removeClass().addClass('clue-' + direction + '-jtip').addClass(' cluetip-jtip'); if (opts.arrows) { // set up arrow positioning to align with element var bgY = (posY - tipY - opts.dropShadowSteps); $cluetipArrows.css({top: (/(left|right)/.test(direction) && posX >=0 && bgY > 0) ? bgY + 'px' : /(left|right)/.test(direction) ? 0 : ''}).show(); } else { $cluetipArrows.hide(); } // (first hide, then) ***SHOW THE CLUETIP*** $dropShadow.hide(); $cluetip.hide()[opts.fx.open](opts.fx.openSpeed || 0); if (opts.dropShadow) { $dropShadow.css({height: tipHeight, width: tipInnerWidth, zIndex: $this.data('thisInfo').zIndex-1}).show(); } if ($.fn.bgiframe) { $cluetip.bgiframe(); } // trigger the optional onShow function opts.onShow.call(link, $cluetip, $cluetipInner); }; // INACTIVATION var inactivate = function(event) { isActive = false; $cluetipWait.hide(); if (!opts.sticky || (/click|toggle/).test(opts.activation) ) { cluetipClose(); clearTimeout(closeOnDelay); } if (opts.hoverClass) { $this.removeClass(opts.hoverClass); } }; // close cluetip and reset some things var cluetipClose = function() { $cluetipOuter .parent().hide().removeClass(); opts.onHide.call(link, $cluetip, $cluetipInner); $this.removeClass('cluetip-clicked'); if (tipTitle) { $this.attr(opts.titleAttribute, tipTitle); } $this.css('cursor',''); if (opts.arrows) { $cluetipArrows.css({top: ''}); } }; $(document).bind('hideCluetip', function(e) { cluetipClose(); }); // BIND EVENTS // activate by click if ( (/click|toggle/).test(opts.activation) ) { $this.bind('click.cluetip', function(event) { if ($cluetip.is(':hidden') || !$this.is('.cluetip-clicked')) { activate(event); $('.cluetip-clicked').removeClass('cluetip-clicked'); $this.addClass('cluetip-clicked'); } else { inactivate(event); } this.blur(); return false; }); // activate by focus; inactivate by blur } else if (opts.activation == 'focus') { $this.bind('focus.cluetip', function(event) { activate(event); }); $this.bind('blur.cluetip', function(event) { inactivate(event); }); // activate by hover } else { // clicking is returned false if clickThrough option is set to false $this[opts.clickThrough ? 'unbind' : 'bind']('click', returnFalse); $this.hoverIntent({ // hoverintent now REQUIRED! sensitivity: opts.hoverIntent.sensitivity, interval: opts.hoverIntent.interval, timeout: opts.hoverIntent.timeout, over: function(event) {activate(event);}, out: function(event) {inactivate(event); $this.unbind('mousemove.cluetip');} }); $this.bind('mouseover.cluetip', function(event) { $this.attr('title',''); }).bind('mouseleave.cluetip', function(event) { $this.attr('title', $this.data('thisInfo').title); }); } }); }; /** * @description default settings of $.fn.cluetip * Each can be explicitly overridden by changing its value * $.fn.cluetip.defaults.width = 200; * Each can also be overridden by passing an options map to the cluetip method * $('a.example').cluetip({width: 200}); * would change the default width to 200 for clueTips invoked by a link with class of "example" * * @augments $.fn.cluetip * @requires jQuery */ $.fn.cluetip.defaults = { // set up default options width: 400, // The width of the clueTip height: 'auto', // The height of the clueTip cluezIndex: 97, // Sets the z-index style property of the clueTip positionBy: 'auto', // Sets the type of positioning: 'auto', 'mouse','bottomTop', 'fixed' topOffset: 24, // Number of px to offset clueTip from top of invoking element leftOffset: 12, // Number of px to offset clueTip from left of invoking element local: false, // Whether to use content from the same page for the clueTip's body localPrefix: null, // string to be prepended to the tip attribute if local is true hideLocal: true, // If local is true, this determines whether local content to be shown in clueTip should be hidden at its original location attribute: 'resource', // the attribute to be used for fetching the clueTip's body content -- rel is sanitized by wiki!!! titleAttribute: 'title', // the attribute to be used for fetching the clueTip's title splitTitle: '', // A char to split the title attribute into title and divs within clueTip body. Example: | escapeTitle: false, // whether to html escape the title attribute showTitle: true, // show title bar of the clueTip, even if title attribute not set hoverClass: '', // class applied to the invoking element onmouseover and removed onmouseout cursor: 'help', arrows: false, // if true, displays arrow on appropriate side of clueTip dropShadow: true, // set to false if you don't want the drop-shadow effect on the clueTip dropShadowSteps: 6, // adjusts the size of the drop shadow sticky: false, // keep visible until manually closed mouseOutClose: false, // close when clueTip is moused out activation: 'hover', // set to 'click' to force user to click to show clueTip // set to 'focus' to show on focus of a form element and hide on blur clickThrough: false, // if true, and activation is not 'click', then clicking on link will take user to the link's href, // even if href and tipAttribute are equal closePosition: 'top', // location of close text for sticky cluetips; can be 'top' or 'bottom' or 'title' closeText: 'X', // text (or HTML) to to be clicked to close sticky clueTips truncate: 0, // number of characters to truncate clueTip's contents. if 0, no truncation occurs // effect and speed for opening clueTips fx: { open: 'show', // can be 'show' or 'slideDown' or 'fadeIn' openSpeed: '' }, hoverIntent: { // settings for hoverIntent sensitivity: 4, interval: 300, timeout: 0 }, // short-circuit function to run just before clueTip is shown. onActivate: function(e) {return true;}, // function to run just after clueTip is shown. onShow: function(ct, ci){}, // function to run just after clueTip is hidden. onHide: function(ct, ci){}, // whether to cache results of ajax request to avoid unnecessary hits to server ajaxCache: true, // process data retrieved via xhr before it's displayed ajaxProcess: function(data) { data = data.replace(/<(script|style|title)[^<]+<\/(script|style|title)>/gm, '').replace(/<(link|meta)[^>]+>/g,''); return data; }, // can pass in standard $.ajax() parameters. Callback functions, such as beforeSend, // will be queued first within the default callbacks. // The only exception is error, which overrides the default ajaxSettings: { // error: function(ct, ci) { /* override default error callback */ } // beforeSend: function(ct, ci) { /* called first within default beforeSend callback } dataType: 'html' } }; })($); // END Cluetip Plugin Code ///////////////////// window.initCluetips = function () { var jPopup = $('span.cluetip a'); if (jPopup.length) { // only if at least one popup exists var ctHover = { arrows: true, height: 275, width: 400, fx: {open:'fadeIn', openSpeed:'3'}, // open can be 'show' or 'slideDown' or 'fadeIn' titleAttribute: 'suppress-title-display', positionBy: 'bottomTop', sticky: true, mouseOutClose: true, closePosition: 'title' }, ctClick = { activation: 'click', height: 275, width: 400, fx: {open:'fadeIn', openSpeed:'3'}, // open can be 'show' or 'slideDown' or 'fadeIn' titleAttribute: 'suppress-title-display', sticky: true, closePosition: 'title', onShow: function () {// make title draggable if (typeof mw != 'undefined'){ mw.loader.using('jquery.ui.draggable', function () { $( '#cluetip' ).draggable({handle: '#cluetip-title'}); $('#cluetip-title').css({cursor:'move'}); }); } } }; // Design: Without js, a normal link should exist. With js, normal click should only call cluetip, which in turn offers opening in new window. jPopup.each(function() { var jLink=$(this), jSpan=jLink.parent(); jLink.attr('resource', jSpan.attr('resource')); if (jSpan.hasClass('cluetip-hover')) { jLink.cluetip(ctHover); } else if (jSpan.hasClass('cluetip-click')) { jLink.cluetip(ctClick); } }); } // END if popup found }; //////////////////////////////////// // Modal Layer base functionality // //////////////////////////////////// // for program flow see [[MediaWiki:ModalLayer and image zoom docu‎]] /** * @description: Hide (= close) modal layer (Note: cyclical dependency with next method unavoidable) * @requires modalLayer_KeyDown() * @returns {Boolean} */ window.modalLayer_Hide = function () { $(document).unbind('keydown', modalLayer_KeyDown); $('#modal-fg').fadeOut(function() { $('#modal-bg').hide(); $(this).empty().hide(); }); return false; }; /** * @description: Close (hide) modal layer on escape, backspace and arrow left key * @requires modalLayer_Hide() * @param {event} e the keyboard event object * @returns {undefined} */ window.modalLayer_KeyDown = function (e) { if ((e.keyCode === 8) || (e.keyCode === 27) || (e.keyCode === 37)) { modalLayer_Hide(); } }; /** * @description: Create modal layer and execute fnRender * @param {function} fnRender custom function to display something * @param {object} paramsObj generic parameters passed to "fnRender" * @returns {undefined} */ window.modalLayer_Create = function (fnRender, paramsObj) { // find existing or create background & layer var modalBG = $('#modal-bg'), modalFG = $('#modal-fg'); if (modalBG.length === 0) { // first time init if (typeof(document.body.style.maxHeight) === 'undefined') { // if IE 6 $('body','html').css({height: '100%', width: '100%'}); } // add styles (IE6 hack not possible as element style!) $('head').append('<style type="text/css">#modal-bg {position:fixed; z-index:100; top:0px;left:0px; height:100%;width:100%; background:black; opacity:0.8; filter:alpha(opacity=80); display:none;}\n' + '#modal-fg {position:fixed; z-index:101; top:50%;left:50%; padding:3px; border:2px solid #E0E0E0; background-color:white; display:none;}\n' + // IE6 hack: add (very!) slow IE-CSS-expression only for IE < 7 ( ( navigator.userAgent.toUpperCase().indexOf('MSIE ') > 0 && parseFloat(navigator.appVersion) < 7 ) ? '* html #modal-bg {position: absolute; height:expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + \'px\');}\n* html #modal-fg {position: absolute; margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + \'px\');}\n' : '') + '#modal-fg img {display:block;}\n</style>'); modalBG = $('<div id="modal-bg"/>'); // #### in old code version: HEIGHT was changed to: $(document).height()-- necessary for some browsers??? Trying without! modalFG = $('<div id="modal-fg" />'); modalBG.click(function() { modalLayer_Hide(); }); $('body').append(modalBG).append(modalFG); } // END first time init $(document).keydown(modalLayer_KeyDown); // generic view port functionality: close icon and background click modalFG .append( $('<div style="position:absolute;right:4px;"/>') .append(createButton('close', modalLayer_Hide)) ); modalBG .append('<img src="' + $.resource('ImageZoom2nd_iconLoader') + '" id="loaderIcon" style="position:absolute;top:50%;left:50%;"/>') .show(); fnRender(paramsObj); // Execute custom logic, example: modalLayer_ZoomImage }; /** * @description Show modal layer based on a image * * @requires createButton() * @requires modalLayer_InitShowIviewerZoomImage() * @requires modalLayer_Hide() * @requires $.resource() * * @param {object} newImg new image object * @param {object} oriImg original image object * @returns {undefined} */ window.modalLayer_ShowImage = function (newImg, oriImg) { var title = oriImg.title, imgWidth = newImg.width, imgHeight = newImg.height, modalBG = $('#modal-bg'), modalFG = $('#modal-fg'); modalBG.find('#loaderIcon').remove(); if (imgWidth===0) { // Only IE, only if newImg = oriImg.clone(): cloned image in IE has no width imgWidth = oriImg.width; imgHeight = oriImg.height; } // extend height of modal layer for no-zoom msg var zoomIsPossible = (imgWidth !== oriImg.width), layerHeight = imgHeight + 105 + ((!zoomIsPossible) ? 60 : 0), layerWidth = Math.max(300, imgWidth + 70); // reserve minimal text width // delete alt text & add click function to hide modal $(newImg).removeAttr('alt') .attr('title', title.replace($.resource('ImageZoom1st_toolTipImageZooming'),$.resource('ClueTip_toolTipClose'))) .click( function() {modalLayer_Hide();}); modalFG .css({width: layerWidth + 'px', height: layerHeight + 'px', 'margin-left': -(layerWidth/2)}) .append( zoomIsPossible ? $('<div style="position:absolute;left:4px;" id="iviewer_zoom_icon"/>') .append(createButton('zoomImg', modalLayer_InitShowIviewerZoomImage)) : '' ) // append content to foreground; wrap image with <div> .append($('<div id="modal-fg-wrapper" style="margin-left:' + (layerWidth-imgWidth) / 2 + 'px; margin-top:35px;" />') .append(newImg)// add image ) // + caption .append($('<div id="zoomcaption" class="zoomcaption" style="text-align:center; margin:8px 2px 2px 2px; font-weight:bold;"/>') .append(title.replace('(' + $.resource('ImageZoom1st_toolTipImageZooming') + ')', '') + '<br />') // URL to metadata page from "a[href]" around img .append($.linkBuilder('ImageZoom1st_imageMetadataLink', '', $(oriImg).closest('a').attr('href'), 'target="_blank"')) .append( !zoomIsPossible ? '<br/><br/><span style="color:red;" >' + $.resource('ImageZoom1st_zoomNotPossible') + '</span>' : '') ); // take away IE6 modifications if ( !( navigator.userAgent.toUpperCase().indexOf('MSIE ') > 0 && parseFloat(navigator.appVersion) < 7 )) { modalFG.css({'margin-top': -((layerHeight + 8) / 2)}); // 8 from other margin-top } modalFG.fadeIn(50); }; /** * @description: load script and functionality on demand for jQuery plugin iviewer * @requires MediaWiki:Jquery.zoomImage.js with function modalLayer_ShowIviewerZoomImage() * @requires mw.config.get * @requires modalLayer_ShowIviewerZoomImage() * @returns {Boolean} */ window.modalLayer_InitShowIviewerZoomImage = function () { if (typeof modalLayer_ShowIviewerZoomImage !== 'function') { $.getScript(mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=MediaWiki:Jquery.zoomImage.js&action=raw&ctype=text/javascript', function(){modalLayer_ShowIviewerZoomImage();}); } else { modalLayer_ShowIviewerZoomImage (); } return false;// needed for click on <a href'#'></a> → no # appended to the URL }; /** * @description: custom function to be passed to modal layer zooming an image * @param {object} paramsObj object containing "caller" = ref to a link including an img * @requires $.random() * @requires modalLayer_ShowImage() * @returns {undefined} */ window.modalLayer_ZoomImage = function (paramsObj) { var oriImg = $(paramsObj.caller).find('img').get(0), // caller is typically a[href] urlParts = oriImg.src.split('/'); if ((oriImg.src.search(/\/thumb\//) === -1) || (urlParts[urlParts.length - 1].search(/px-/) === -1)) { // no larger picture possible, use existing modalLayer_ShowImage($(oriImg).clone().get(0), oriImg); } else { // images with "/thumb/" in path can be enlarged using URL-based resize var stdThumbWidths = [1600,1400,1280,1024,900,800,700,640,600,550,480,400,350,320,300,250,200,180,150,120,100,80], maxHeight = $(window).height() - 105, // 70 for additional text; 35 for space at top and bottom maxWidth = $(window).width() - 50; // 50 for space left & right // smallest possible of upscaling factor for height, width, multiply back to get max possible width var maxScaledWidth = oriImg.width * Math.min(maxHeight/oriImg.height, maxWidth/oriImg.width), maxScaledHeight = oriImg.height * maxScaledWidth / oriImg.width; // reduce to next smaller standard thumb width (mediawiki preview settings plus additions) for (var i = 0; i < 22; i++) { if (stdThumbWidths[i] < maxScaledWidth) { maxScaledWidth = stdThumbWidths[i]; maxScaledHeight = oriImg.height * maxScaledWidth / oriImg.width; break; } } urlParts[urlParts.length - 1] = maxScaledWidth + 'px-' + urlParts[urlParts.length - 2]; var newImg = new Image(maxScaledWidth, maxScaledHeight); // Load image. load/error occur asynchronously, need independent calls // appending "random()" seems necessary for IE6-8, else "zoom image, close, zoom again" fails. REASON? $(newImg) .attr('src', urlParts.join('/')+'&rnd='+$.random(0,10000)) .load(function() { // load succeeded: create modal layer after loading image, else values (width, etc.) are 0 modalLayer_ShowImage(newImg, oriImg); }) .error(function() { // Error loading thumb, main reason: thumbs must be smaller than ori size. // Currently assuming this reason, loading full original image; BETTER: test using API: // https://commons.wikimedia.org/w/api.php?action=query&titles=Image:Lamium_purpureum_scan.jpg&prop=imageinfo&iiprop=size urlParts.pop(); // remove last part (e.g. 800px-xyz.jpg) // set default width and height in case of thumbnail generation failure with huge images newImg = new Image(maxScaledWidth, maxScaledHeight); // load original image $(newImg) .attr('src', urlParts.join('/').replace('/thumb', '')) // remove "/thumb" from url to get full. DO NOT ADD random here! .load(function() {modalLayer_ShowImage(newImg, oriImg);}) // load succeeded // 2nd level fail -> load from wikimedia.org .error(function() { // set default width and height in case of thumbnail generation failure with huge images newImg = new Image(maxScaledWidth, maxScaledHeight); $(newImg) .attr('src', 'https://commons.wikimedia.org/w/thumb.php?f=' + urlParts[urlParts.length-1] + '&width=' + maxScaledWidth + 'px' + '&rnd='+$.random(0,10000)) .load(function() {modalLayer_ShowImage(newImg, oriImg);}) // load succeeded // 3rd level fail -> load unchanged wiki page thumb .error(function() {modalLayer_ShowImage($(oriImg).clone().get(0), oriImg);}); }); }); // end first level error } }; /** * @description: Show image in modal layer * * @requires modalLayer_Create() * @requires modalLayer_ZoomImage() * @param {caller} caller reference to a link around image, function to call * @returns {False} */ window.zoomImage = function (caller) { modalLayer_Create(modalLayer_ZoomImage, {caller: caller}); return false; // cancel default event }; /** * @description: Add a modal zoom functionality to all images linking to own metadata * the CSS * class=no-image-popup or class=no-popup-image OR * class=no-image-zoom or class=no-zoom-image prevents an image from being zoomable, e.g. * [[File:Example.jpg|caption text|thumb|class=no-popup-image]] * @requires $.resource() * @requires zoomImage() * @returns {undefined} */ window.initImageZooming = function () { if ( $.inArray('mmv', mw.loader.getModuleNames()) != -1 ) { // check for MultiMediaViewer $('a[href].image img:not(.no-image-popup,.no-popup-image,.no-image-zoom,.no-zoom-image)').each(function () { var jParent = $(this).parent(), metaURL = jParent.attr('href'), urlParts = this.src.split('/'), imgFileName = (this.src.search(/\/thumb\//) !== -1) ? urlParts[urlParts.length - 2] : urlParts[urlParts.length - 1]; // Is file name also in metadata page link? Else abort (e.g. for |link=parameter| wiki-images) // Problem: a.href and img.scr inconsistently! use encoded or non-encoded versions of e.g. () or "," -> unescape if (unescape(metaURL).indexOf(unescape(imgFileName)) === -1) { return; } // pass along the image jParent.click(function() { return zoomImage(this); }); // set or change title, set alt to title var newTitle = this.alt + ((this.alt.length === 0) ? '' : ' ') + '(' + $.resource('ImageZoom1st_toolTipImageZooming') + ')'; $(this).attr({title:newTitle, alt:newTitle}); }); } };// initImageZooming // END Modal Layer/Img Zoom //////////////////////////// // jKey Source mw.loader.load( '/w/index.php?title=MediaWiki:JKey.js&action=raw&ctype=text/javascript' ); switch (mw.config.get('wgAction')) { case 'edit': case 'submit': // load help for the wikiEditor mw.loader.load( '/w/index.php?title=MediaWiki:JKeyWikiEditorHelp.js&action=raw&ctype=text/javascript' ); // Wizard to insert template:Zitat mw.loader.load( '/w/index.php?title=MediaWiki:WikiEditor-insert-Zitat.js&action=raw&ctype=text/javascript' ); // Wizard to insert file showing a preview mw.loader.load( '/w/index.php?title=MediaWiki:WikiEditor-insert-file-with-preview.js&action=raw&ctype=text/javascript' ); break; } // click-text modifications for mw-customcollapsible triggering from outside of mw-collapsible mw.loader.load( '/w/index.php?title=MediaWiki:Mw-customcollapsible.js&action=raw&ctype=text/javascript' );; /** * @description create jQuery UI Tabs on CSS class="use-jquery-ui-tabs" * * @requires https://www.mediawiki.org/wiki/Extension:Semantic_Forms * @requires jQuery-UI mw.loader.using( 'jquery.ui.tabs', function () {}); * @returns {undefined} */ window.initUiTabsInForms = function () { console.log('initUiTabsInForms'); var use_jquery_ui_tabs= $('.use-jquery-ui-tabs'); var use_jquery_ui_tabs_vertical= $('.use-jquery-ui-tabs-vertical'); if (use_jquery_ui_tabs.length || use_jquery_ui_tabs_vertical.length) { mw.loader.using( 'jquery.ui.tabs', function () { var use_jquery_ui_tabs= $('.use-jquery-ui-tabs');// Google Chrome Fix var use_jquery_ui_tabs_vertical= $('.use-jquery-ui-tabs-vertical');// Google Chrome Fix console.log('initUiTabsInForms mw.loader.using'); if ($('.use-jquery-ui-tabs').length) { $('.use-jquery-ui-tabs').tabs({event: 'mouseover'}); console.log('initUiTabsInForms tabs'); } if (use_jquery_ui_tabs_vertical.length) { use_jquery_ui_tabs_vertical.tabs({event: 'mouseover'}).addClass( 'ui-tabs-vertical ui-helper-clearfix' ); use_jquery_ui_tabs_vertical.find( 'li' ).removeClass( 'ui-corner-top' ).addClass( 'ui-corner-left' ); console.log('initUiTabsInForms tabs_vertical'); } }); } }; /** * @description: Get jQuery ui tabs loaded for characters displayed as nested ui tabs * @requires: jquery.ui.tabs * @requires: template:Character_images_tabs * @returns {undefined} */ window.init_character_ui_tabs = function () { var character_ui_tabs_nested=$('#character_ui_tabs_nested'); if (character_ui_tabs_nested.length) { mw.loader.using('jquery.ui.tabs', function () { var ui_version =$.ui.version.split('.').map(function(x) { return parseInt(x, 10); }) , first_tab_index = character_ui_tabs_nested.find('li').index( character_ui_tabs_nested.find('li').not('.no-image-content').first() ); if (ui_version[0] <= 1 && ui_version[1] < 10) { character_ui_tabs_nested.tabs({ fx: [{opacity:'toggle', duration: 'slow'}, {opacity:'toggle', duration: 'slow'}], active: first_tab_index }); character_ui_tabs_nested.find('.inner-tabs-container').tabs({ fx: [{opacity:'toggle', duration: 'slow'}, {opacity:'toggle', duration: 'slow'}] }); } else { character_ui_tabs_nested.tabs({ hide: {effect: 'fadeOut', duration: 'slow'}, show: {effect: 'fadeIn', duration: 'slow'}, heightStyle: 'auto', active: first_tab_index }); character_ui_tabs_nested.find('.inner-tabs-container').tabs({ hide: {effect: 'fadeOut', duration: 'slow'}, show: {effect: 'fadeIn', duration: 'slow'}, heightStyle: 'auto' }); } }); } }; /** * @description init moveable table of contents * offers floating the table of contents to the left or right side (will make part of the page invisible!) * * @requires $.resource() * @requires $.moveTOC() * @returns {undefined} */ window.initmoveTOC = function () { $('#togglelink').after(' | <span style="cursor:pointer;color:blue;" title="'+ $.resource('MoveTOC_toolTipFloatleft') +'" onclick="$.moveTOC(\'0px\')" >◄</span> <span style="cursor:pointer;color:blue;" title="'+ $.resource('MoveTOC_toolTipFloatright') +'" onclick="$.moveTOC(\'right\')" >►</span> <span id="restorestatic" style="display:none;">| <span style="cursor:pointer;" title="'+ $.resource('MoveTOC_toolTipUnfloat') +'" onclick="$.moveTOC(\'restore\')" >×</span></span> '); };// end initmoveTOC /** * @description init moveable table of contents * @requires initmoveTOC() * @requires $.resource() * @param {string} position may be string "right", or "restore", everything else is interpreted as "left" * @returns {undefined} */ $.moveTOC = function (position) { /* position may be string "right", or "restore", everthing else is interpreted as "left" */ var offsetX, offsetY; var TOC = $('#toc'); if ($('#moveTOC').length === 0) { TOC.wrapAll('<div id="moveTOC" style="z-index:1;"></div>'); } if ($('#toTop').length === 0) { $('#toctitle h2').after('<a href="#mw-head" id="toTop" title="'+$.resource('MoveTOC_toolTipNavigatePagetop') +'">↑ </a>'); } switch (position) { case 'right': offsetX = $('#content').width() - 140; offsetY = - 55; break; case 'restore': TOC.unwrap(); $('#toTop').remove(); $('#restorestatic').hide('slow'); // display:inline-block is somehow added $('#toctitle h2').show('slow').css('display',''); break; default: offsetY = -110; offsetX = 0 - $('#mw-panel').width() - 14 ; // padding#content break; }// end switch if (position != 'restore') { $('#toctitle h2').hide('slow'); $('#restorestatic').show(); $('#moveTOC') .css({'position':'absolute'}) .animate({'max-width':'13em'}) .animate({ 'left': $(window).scrollLeft()+ offsetX + 'px', 'top' : $(window).scrollTop() + offsetY + 'px' }); // emulate position fixed see CSS .navigation-left .navigation-right $(window).scroll(function(){ $('#moveTOC') .animate({ 'left': $(window).scrollLeft()+ offsetX + 'px', 'top' : $(window).scrollTop() + offsetY + 'px' },{queue: false, duration: 400} // queue: don't wait ); }); } // end positioning unless restore };// end function moveTOC() /////////////////////////////////////////////////////////////// // specific to http://offene-naturfuehrer.de /////////////////////////////////////////////////////////////// /** * @description: collapsible parts: div and tr → Template:Hidden * may be fused later with toggleCollapse * main difference: initCollapseBox() uses a switcher defined by the Wikitemplate * and is not using a javascript resource title. * * the only advanced feature it has: collpsible table rows * * otherwise use http://www.mediawiki.org/wiki/RL/DM#jQuery.makeCollapsible * @requires $.resources() * @requires $.jI18n.en.CollapseBox_toolTipExpand, $.jI18n.en.CollapseBox_toolTipCollapse * @returns {Boolean} */ window.initCollapseBox = function () { /* is nested in: div.collapsebox └ div.switcher └ div.collapsecontent */ var hasSwitcher = $('div.switcher .show, div.switcher .hide'); if(hasSwitcher.length){ $.each(hasSwitcher, function(index){// add tooltip hasSwitcher[index].title = hasSwitcher[index].className === 'show'? $.resource('CollapseBox_toolTipExpand') : $.resource('CollapseBox_toolTipCollapse'); }); $('div.collapsebox div.switcher').on('click', function() { $(this).nextAll('div.collapsecontent:first').slideToggle(250); /* $(this).toggle() does not work in live as toggle is a bind() therefore toggle must be bound to a different DOM element */ $(this).find('.show, .hide').toggle(); }); /* is in a table: tr.collapsebox └ div.switcher tr.collapsecontent */ $('tr.collapsebox div.switcher').on('click', function() { $(this).closest('tr.collapsebox').nextAll('tr.collapsecontent:first').toggle(); $(this).find('.show, .hide').toggle(); }); // TODO is a better generic check possible? if (mw.config.get('wgPageName') === 'Spezial:Suche') { if (!$('.mw-search-results').length) { // open box with additional search possibilities $('.switcher .show').trigger('click'); } } return true; } return false; };// END initCollapseBox() /////////////////////// // Table Filter/Sort // /////////////////////// /** * @description Table Filter/Sort * TODO ?replace by jQuery plugin datatable? * * @requires $.resource() * @requires $.jI18n.en * @returns {undefined} */ window.initTableFilterSort = function (){ // see MediaWiki:SortTableFilter.js /* Note: problem is auto-inserted <tbody></tbody> by the browser: must be removed and replaced by thead + tbody. jQuery.unwrap() was not successful */ // add possibly more classes from http://www.javascripttoolbox.com/lib/table/documentation.php // Note: only applies to non-nested tables var jAutotables = $('table.table-autosort, table.table-autofilter, table-autostripe,table-sorted-asc,table-sorted-desc, table-filtered'); if (jAutotables.length) { // Note: in MediaWiki:SortTableFilter.js 'SortTableFilter_InputFilterTitle' was not recognized $.extend(true, $.jI18n, { en: { SortTableFilter_AutoSortTitle : 'Click to sort', SortTableFilter_FilterAllLabel: 'Filter: All', SortTableFilter_InputFilterTitle: 'Filter text (case sensitive, uses reg. expressions)' }, de: { SortTableFilter_AutoSortTitle : 'Zum Sortieren klicken', SortTableFilter_FilterAllLabel: 'Zeige: alle', SortTableFilter_InputFilterTitle: 'Text filtern (GROß/klein!, nutzt reg. Ausdrücke)' } }); // get sortable/filterable here already otherwise multiple th-filters $.getScript(mw.config.get( 'wgServer' ) + mw.config.get( 'wgScript' ) + '?title=MediaWiki:SortTableFilter.js&action=raw&ctype=text/javascript', function(){return true;}); // modify tables to introduce thead structure jAutotables.each(function(index){ //TODO simplify code? if()… // There may or may not be a tbody around tr. NOTE: $.unwrap() does not work here! // Memo: find('tr th') finds th, .parent() retrieves tr! .wrapAll will wrap inside DOM, not in return value! .detach() returns detached // OK in FF 3.6 and IE 7-8, not in IE6 (like the old code) // FURTHER WORK: Ideally, all normal tr td should remain in a tbody. var jThis = $(this), jThead = jThis.find('tr th').parent().detach(), jTfoot = jThis.find('tr[class=tfoot] td').parent().detach(),// remove it from the DOM jTbody = jThis.find('tbody:first'); if (jTbody.length===0) { jThis.children().wrapAll('<tbody/>'); jTbody = jThis.find('tbody:first'); } jTbody.before($('<thead/>').append(jThead)); if (jTfoot.length) { jTbody.after($('<tfoot/>').append(jTfoot)); } // th with class="input" gives an input field instead of selections $(this).find('th[class=input]').append('<input name="filter" title="'+$.resource('SortTableFilter_InputFilterTitle')+'" size="8" onkeyup="Table.filter(this,this)">'); });// end each() } // END if any autotable }; /** * @description: Collapse the TOC using id="toc-autocollapse" * @returns {undefined} */ window.initTOCautocollapse = function () { if ($('#toc-autocollapse').length) { $('#togglelink').click(); } };// end initTOCautocollapse() /** * Add a placeholder message and checks on Special:Contact * * Due to e-mail configurations all non @mfn-berlin.de addresses fail to work * as from-address on Special:Contact. This functions adds a placeholder and checks the * user’s input * @requires extension:ContactPage * @requires mw.config * @requires jQuery */ window.prepareSpecialContact4Info = function () { var placeholderMessage = '', warningMessageDoesNotWork = ''; switch (mw.config.get( 'wgCanonicalSpecialPageName' )) { case 'Contact': // is a Special:Contact page regardless of language switch (mw.config.get('wgPageName')) { case 'Special:Contact': case 'Spécial:Contact': placeholderMessage = 'Leave it empty or add e-mail in message (mfn-berlin.de works only)'; warningMessageDoesNotWork = 'Only mfn-berlin.de addresses do work. Leave it empty please and add your address in the message. Thank you.'; break; case "Spezial:Kontakt": placeholderMessage = 'E-Mail in Nachricht dazu oder leer lassen (nur mfn-berlin.de geht)'; warningMessageDoesNotWork = 'Nur mfn-berlin.de Adressen können verarbeitet werden. Bitte leer lassen oder E-Mail im Text angeben. Danke.'; break; default: placeholderMessage = 'Leave it empty or add e-mail in message (mfn-berlin.de works only)'; warningMessageDoesNotWork = 'Only mfn-berlin.de addresses do work. Leave it empty please and add your address in the message. Thank you.'; break; } // check input if (!$('input[name="wpFromAddress"]').val() || $('input[name="wpFromAddress"]').val().match(/.*@mfn-berlin.de/)) { $('input[name="wpFromAddress"]') .css({'background-color': '', 'cursor': ''}) .attr({'title': ''}); } else { $('input[name="wpFromAddress"]') .css({'background-color': 'orange', 'cursor': 'help'}) .attr({'title': warningMessageDoesNotWork}); } $('input[name="wpFromAddress"]').on('focusout', function () { if (!$(this).val() || $(this).val().match(/.*@mfn-berlin.de/)) { $(this).css({'background-color': '', 'cursor': 'help'}).attr({'title': warningMessageDoesNotWork}); } else { $(this).css({'background-color': 'orange', 'cursor': 'help'}).attr({'title': warningMessageDoesNotWork}); } }); $('input[name="wpFromAddress"]').attr({'placeholder': placeholderMessage}); break; }// switch is a contact page };// end prepareSpecialContact4Info() /////////////////////// // specific to http://offene-naturfuehrer.de // Page-specific scripts: switch (mw.config.get( 'wgPageName' )) { // Minimize the pages on which the code will be loaded // vielleicht später auch woanders, d.h. als vorgewählte Suche auf Taxaseiten beispielsweise? case 'Datenquellen': case 'Hilfe:Datenquellen': case 'Online-Überprüfung_von_Bestimmungen': case 'Hilfe:Online-Überprüfung_von_Bestimmungen': case 'Tipps_zur_Bildersuche': case 'Hilfe:Tipps_zur_Bildersuche': case 'Spezial:Suche': mw.loader.load( '/w/index.php?title=MediaWiki:SearchTools.js&action=raw&ctype=text/javascript' ); break; case 'Hilfe:Nummerierungen_im_jKey_abändern_(Lead_Nummern)': mw.loader.load( '/w/index.php?title=MediaWiki:JKeyRenumberingTool.js&action=raw&ctype=text/javascript' ); break; case 'Hilfe:Konvertierung_geschachtelt-eingerückter_Schlüssel_in_das_ON-Format': case 'Testseite': mw.loader.load( '/w/index.php?title=MediaWiki:JKeyTextToLeadTemplateTool.js&action=raw&ctype=text/javascript' );; break; } // Page-specific scripts more flexible: if (mw.config.get('wgPageName').match(/^Basismerkmale_für/i) || mw.config.get('wgPageName').match(/^Vorlage:Character_State/i) || mw.config.get('wgPageName').match(/^Vorlage:Character_Definition/i) ) { mw.loader.load( '/w/index.php?title=MediaWiki:ToolGetRandomId.js&action=raw&ctype=text/javascript' );; } /* See also https://www.mediawiki.org/w/index.php?title=ResourceLoader/Legacy_JavaScript&oldid=2090764 When document is completely loaded */ jQuery(document).ready(function($) { reference_footnote_tooltips(); initImageZooming(); initTargetHighlighting(); // page-internal jumps initmoveTOC(); // TOC CSS position fixed or static initTOCautocollapse(); // auto collapse on #toc-autocollapse e.g. Template:Artinformation BiolFlor prepareSpecialContact4Info(); // check from-Email at Special:Contact // specific to http://offene-naturfuehrer.de initTableFilterSort(); // tests internally whether table with corresponding classes exist mw.loader.load( mw.config.get('wgScript') + '?title=MediaWiki:AddNewOpenMediaFileVersion.js&action=raw&ctype=text/javascript' );;// namespace specific button on top to upload file at OpenMedia if(mw.config.get( 'wgAction' )==='view') { if($('.decisiontree').length !== 0) { mw.loader.load( mw.config.get('wgScript') + '?title=MediaWiki:JKeyRenderLanguageTaggedText2wgUserLanguage.js&action=raw&ctype=text/javascript' );; } } switch(mw.config.get( 'wgAction' )) { case 'edit': case 'view': /* case 'submit': does not work somehow in MW. 1.20.7 */ init_character_ui_tabs(); } // page specific if(mw.config.get( 'wgAction' )==='formedit' || mw.config.get( 'wgCanonicalSpecialPageName' )==='FormEdit'){ // initConfirmDeleteSubform(); markHiddenFormFields(); initUiTabsInForms(); } initCluetips(); // specific to http://offene-naturfuehrer.de initCollapseBox(); //collapsible parts }); // end $(document).ready()
compare-invalid-title (talk) (Translate) The title you specified is invalid.
compare-page1 (talk) (Translate) Page 1
compare-page2 (talk) (Translate) Page 2
compare-rev1 (talk) (Translate) Revision 1
compare-rev2 (talk) (Translate) Revision 2
compare-revision-not-exists (talk) (Translate) The revision you specified does not exist.
compare-submit (talk) (Translate) Compare
compare-title-not-exists (talk) (Translate) The title you specified does not exist.
comparepages (talk) (Translate) Compare pages
comparepages-summary (talk) (Translate)  
compareselectedversions (talk) (Translate) Compare selected revisions
concepts (talk) (Translate) Concepts
confirm (talk) (Translate) Confirm
confirm-purge-bottom (talk) (Translate) Purging a page clears the cache and forces the most current revision to appear.
confirm-purge-top (talk) (Translate) Clear the cache of this page?
confirm-unwatch-button (talk) (Translate) OK
confirm-unwatch-top (talk) (Translate) Remove this page from your watchlist?
confirm-watch-button (talk) (Translate) OK
confirm-watch-top (talk) (Translate) Add this page to your watchlist?
confirm_purge_button (talk) (Translate) OK
confirmable-confirm (talk) (Translate) Are {{GENDER:$1|you}} sure?
confirmable-no (talk) (Translate) No
confirmable-yes (talk) (Translate) Yes
confirmdeletetext (talk) (Translate) You are about to delete a page along with all of its history. Please confirm that you intend to do this, that you understand the consequences, and that you are doing this in accordance with [[{{MediaWiki:Policy-url}}|the policy]].
confirmedittext (talk) (Translate) You must confirm your email address before editing pages. Please set and validate your email address through your [[Special:Preferences|user preferences]].
confirmemail (talk) (Translate) Confirm email address
confirmemail_body (talk) (Translate) Someone, probably you, from IP address $1, has registered an account "$2" with this email address on {{SITENAME}}. To confirm that this account really does belong to you and activate email features on {{SITENAME}}, open this link in your browser: $3 If you did *not* register the account, follow this link to cancel the email address confirmation: $5 This confirmation code will expire at $4.
confirmemail_body_changed (talk) (Translate) Someone, probably you, from IP address $1, has changed the email address of the account "$2" to this address on {{SITENAME}}. To confirm that this account really does belong to you and reactivate email features on {{SITENAME}}, open this link in your browser: $3 If the account does *not* belong to you, follow this link to cancel the email address confirmation: $5 This confirmation code will expire at $4.
First page
Last page