Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
(function() { var notices = { Test2: { begin: '9 October 2013 00:00 UTC', end: '17 October 2013 00:00 UTC', corners: [ [34, 74.5], [24.5, 62.1] ], text : "Test" }, /******************************************* * End of list. * Edit only above! * * Format is: * * ID: * { begin: 'date', * end: 'date', * corners: [ [lat,lon], [lat,lon] ], * text: 'message' * } * * There also is an option to use country instead of corners. For example: * ID: * { begin: 'date', * end: 'date', * country: 'US', * text: 'message' * } * * See http://dev.maxmind.com/geoip/legacy/codes/iso3166 for full list of country codes * * * There should be commas between the notices, but not after the last one. BE SURE TO ESCAPE YOUR APOSTROPHES (put a backslash in front of it, like this: \')! * Use [[meta:w:en:link|link]] format for internal links, so that they work properly on the other projects where the geonotice is displayed. * *******************************************/ }; function geoWikiLinker (str, page, text) { text = text || page; return mw.html.element( 'a', { href: mw.util.getUrl( page ), title: page }, text ); } function addGeonoticeCss() { mw.util.addCSS( [ '#watchlist-message .geonotice {', 'width:98%;', 'background:transparent;', 'text-align:left;', 'line-height:1.8em;', '}', '#watchlist-message .geonotice span {', 'font-size:144.5%;', '}', '#watchlist-message .geonotice small {', 'font-style:italic;', 'margin-left:.5em;', '}', '#watchlist-message .geonotice small a::before {', 'content: "[";', '}', '#watchlist-message .geonotice small a::after {', 'content: "]";', '}' ].join( ' ' ) ); } function hideGeonotice(e) { e.preventDefault(); var parentId = $(this).closest('li').attr('id'); var date = new Date(); date.setTime(date.getTime()+8640000000); var expireDate = date.toGMTString(); document.cookie = 'hide' + parentId + '=1; expires=' + expireDate + ';path=/'; $( '#' + parentId ).hide(); $( '#geonotice-hr' ).hide(); return false; } var firstnotice = true; var regexForInternalLinks = /\[\[([^{|}\[\]\n]+)(?:\|(.*?))?\]\]/g; function displayGeonotice(notice) { var geonoticeText = notice.text.replace( regexForInternalLinks, geoWikiLinker ); if (firstnotice) { firstnotice = false; $('#watchlist-message').prepend( $( '<hr>' ).attr({ 'id' : 'geonotice-hr' }) ); addGeonoticeCss(); } $('#watchlist-message').prepend( $('<li>') .attr({ 'class' : 'geonotice plainlinks', 'id' : 'geonotice' + notice.id }) .append( $( '<span>' ) .html( geonoticeText ) ) .append( $( '<small>' ) .append( $('<a>') .text( 'hide' ) .click( hideGeonotice ) .attr({ 'href' : '#' }) ) ) ); } if ( Geo !== undefined && notices ) { var now = new Date(), id, notice, minlat, maxlat, minlon, maxlon, startNotice, endNotice; for (id in notices) { if (!document.cookie.match('hidegeonotice'+id+'=1')) { notice = notices[id]; notice.id = id; if (!notice || !notice.begin || !notice.end) { continue; } startNotice = Date.parse(notice.begin); endNotice = Date.parse(notice.end); if ( now.getTime() > startNotice && now.getTime() < endNotice ) { if (notice.country && Geo.country === notice.country) { displayGeonotice(notice); } else { if (notice.corners) { minlat = Math.min(notice.corners[0][0], notice.corners[1][0]); maxlat = Math.max(notice.corners[0][0], notice.corners[1][0]); minlon = Math.min(notice.corners[0][1], notice.corners[1][1]); maxlon = Math.max(notice.corners[0][1], notice.corners[1][1]); // Geo coordinates can be empty string if unknown. parseFloat makes // these NaN, so that you do not get to see a notice in that case. if ( minlat < parseFloat( Geo.lat ) && parseFloat( Geo.lat ) < maxlat && minlon < parseFloat( Geo.lon ) && parseFloat( Geo.lon ) < maxlon ) { displayGeonotice(notice); } } } } } } } })();