MediaWiki:Common.js: Difference between revisions
Jump to navigation
Jump to search
(load jquery-cookie) |
(load jquery-cookie 2nd attempt) |
||
Line 4: | Line 4: | ||
var gamesAndClubs = []; // from json of all games and clubs | var gamesAndClubs = []; // from json of all games and clubs | ||
mw.loader.load( '/js/jquery.cookie.js | mw.loader.load( '/js/jquery.cookie.js' ); | ||
function ClassProp(css_class, property) { | function ClassProp(css_class, property) { |
Revision as of 17:30, 28 May 2020
/* Any JavaScript here will be loaded for all users on every page load. */ var google_api_key = "AIzaSyAV9jCvr3k6g750_YPm7hVer9ngTef04oY"; var gamesAndClubs = []; // from json of all games and clubs mw.loader.load( '/js/jquery.cookie.js' ); function ClassProp(css_class, property) { this.css_class = css_class; this.property = property; } function set_autocomplete(target_info, filter) { var values = get_autocomplete_values(target_info.property, filter); var target_input = $("." + target_info.css_class); target_input.autocomplete({ source: get_autocomplete_source_function(values), select: function(event, ui) { event.preventDefault(); $(this).val(ui.item.value); $(this).change(); } }); } function get_autocomplete_values(property, filter) { valueDict = {} for(var i = 0; i < gamesAndClubs.length; i++) { var thing = gamesAndClubs[i]; if (filter && !filter(thing)) { continue; } valueDict[thing[property]] = true; } var values = Object.keys(valueDict); values.sort(); return values; } function get_autocomplete_source_function(values) { return function(request, response) { var results = $.ui.autocomplete.filter(values, request.term); response(results.slice(0, 100)); }; } function parse_list(text) { if(text[0] == '\n') { return []; } return text.split("\n")[0].substring("<p>".length).split(","); } function api_parse(text, callback) { var data = {action: "parse", prop: "text", format: "json", text: text }; $.getJSON("/api.php", data, callback); } function get_property_values(property, filter, callback) { var ask = "{{#arraydefine:array|{{#ask:" + filter + "|?" + property + "|link=none|mainlabel=-|headers=hide|limit=10000|sep=@}}|@|unique}}{{#arrayprint:array|,}}"; api_parse(ask, callback); } function default_to_one_and_hide() { if(!$(this).val()) { $(this).val("1"); } $(this).hide(); } function modify_selected_values() { var input = $(this).parent().prev('span').children('input'); var chk_value = this.value; var selected_values = input.val() ? input.val().split(/ *, */) : []; if(this.checked) { selected_values.push(this.value); selected_values.sort(); } else { selected_values = $.grep(selected_values, function(value) { return value != chk_value; }); } input.val(selected_values.join(", ")); } function add_new_input() { var span = this; var input = $(this).children('input').first(); var name = input.attr('name'); var index = "" + $(this).find('input').length - 1; name = name.replace("[is_list]", "[" + index + "]"); var new_item = $('<span class="checkboxSpan"><span> <a href="" class="new_multi_property_link">new</a> </span><span style="display:none;"> new <input name="' + name + '" /></span></span>'); $(this).append(new_item); $(this).find(".new_multi_property_link").click(function(){ $(this).parent().parent().children('span').toggle(); return false; }); } function set_salience_names() { var names = { 1: "Prominent", 2: "Noteworthy", 3: "Peripheral", 4: "Incomplete" }; var inputs = $(this).find('input'); for(var i = 1; i < 5; i++) { inputs[i].nextSibling.nodeValue = " " + names[i]; } } function populate_chron_year_number() { var year = $('[name="Chronology Entry[Year]"]').val(); if(!year) return; var defaultYear = $('[name="Chronology Entry[Year]"]').prop("defaultValue"); if(year == defaultYear) { var defaultVal = $('[name="Chronology Entry[Year Number]"]').prop("defaultValue"); $('[name="Chronology Entry[Year Number]"]').val(defaultVal); return; } var ask = "/Special:Ask/-5B-5BYear::" + year + "-5D-5D"; ask += "/-3FYear-20Number/mainlabel%3D-2D/limit%3D1/order%3DDESC/sort%3DYear_Number/searchlabel%3D/format%3Djson"; var data = {}; $.getJSON(ask, data, function (data) { $('[name="Chronology Entry[Year Number]"]').val(data.items.length ? parseInt(data.items[0].year_number, 10) + 1 : 1); }); } function sort_eras_chronologically() { var spans = $(this).children('span'); /* 1700s 1800s Contemporary Derivative Post-1900 Pre-1700 Predecessor */ $(this).append(spans[6]); $(this).append(spans[3]); $(this).append(spans[5]); $(this).append(spans[0]); $(this).append(spans[1]); $(this).append(spans[4]); $(this).append(spans[2]); $(spans[3]).after("<br />"); } function set_none_to_unknown_for_enumerated_radio_buttons() { var input = $(this).find('input')[0]; input.nextSibling.nodeValue="Unknown"; } function set_none_value_for_enumerated_radio_buttons() { var span = $(this).children('span')[0]; var input = $(span).children('input')[0]; input.value = ""; } function set_date_by_type_of_date() { var type_of_date = $(this).val(); if(type_of_date == "") { $(this).val("Day"); type_of_date = "Day"; } var day = $(this).parents("tr").find(".dayInput"); var month = $(this).parents("tr").find(".monthInput"); if(type_of_date == "Day") { day.show(); month.show(); } else { day.val("1"); day.hide(); if (type_of_date == "Month") { month.show(); } else { month.hide(); } } } function set_ballgame_name() { var championship = $(".championship").val(); var year = $(".yearInput").val(); if(championship) { $(".ballgame_name").val(championship + " " + year); return; } var home_team = $(".home_team").val(); var away_team = $(".away_team").val(); var country = $(".country").val(); var state = $(".state").val(); var city = $(".city").val(); var event = ""; if(home_team != "") { event = home_team; if(away_team != "") { event += " v " + away_team; } } if(home_team.indexOf(" ") == -1) { var places = [city, state, country]; for(var i in places) { if(places[i] != "") { event += (event.length > 0 ? " " : "") + "in " + places[i]; break; } } } var type_of_date = $(".type_of_date").val(); var day = $(".dayInput").val(); var month = $(".monthInput option:selected").text(); var year = $(".yearInput").val(); var date = ""; if(type_of_date == "Day") { date = "on " + day + " " + month + " " + year; } else if(type_of_date == "Month") { date = "in " + month + " " + year; } else if(type_of_date == "Year") { date = "in " + year; } else if(type_of_date == "Circa") { date = "Circa " + year; } var game_number = $(".game_number").val(); if(game_number) { game_number = " " + game_number; } $(".ballgame_name").val(event + " " + date + game_number); } /* Maps... */ var show_predecessor_games = $.cookie('show_predecessor_games') == "true"; var show_additional_markers = $.cookie('show_additional_markers') == "true"; var spread_markers = $.cookie('spread_markers') == "true"; var load_search_markers = function() {}; function set_map() { var elysian_fields = new google.maps.LatLng(40.749885, -74.027172); var lat_long = $('#lat_long').text(); lat_long = lat_long? lat_long: $('[name$="[Coordinates]"]').val(); if(lat_long && lat_long.indexOf("error") == -1) { lat_long = lat_long.split(", "); } else { lat_long = null; } var coords = lat_long? new google.maps.LatLng(parseFloat(lat_long[0]), parseFloat(lat_long[1])) : elysian_fields; var map = $("#map")[0]; map.infoWindow = new google.maps.InfoWindow(); var isBallgamesAndClubs = $(map).hasClass("map_ballgames"); var isMapSearch = $(map).hasClass("map_search"); map.map = new google.maps.Map(map, { center: isBallgamesAndClubs || isMapSearch ? null: coords, zoom: isBallgamesAndClubs || isMapSearch ? null : 11, // zoom bug for boroughs mapTypeId: 'roadmap', scaleControl: true, scaleControlOptions: { position: google.maps.ControlPosition.LEFT_BOTTOM } }); if(isBallgamesAndClubs || isMapSearch) { google.maps.event.addListener(map.infoWindow,'closeclick',function(){ map.infoWindow.marker = null; }); google.maps.event.addListener(map.map, 'zoom_changed', function(event) { if(map.infoWindow.marker) { map.map.setCenter(map.infoWindow.marker.getPosition()); } }); } if(isBallgamesAndClubs) { map.spread_markers = spread_markers; createOverlay("Spread Markers Each Location", function() { var map = $("#map")[0]; $.cookie('spread_markers', this.checked); map.spread_markers = this.checked; map.infoWindow.close(map.map); map.infoWindow.marker = null; filter_map_years(); }, spread_markers); createOverlay("Show Predecessor Games", function() { show_predecessor_games = this.checked; $.cookie('show_predecessor_games', this.checked); set_map_layer(); }, show_predecessor_games); createOverlay("Show Additional Markers", function() { var map = $("#map")[0]; $.cookie('show_additional_markers', this.checked); var set = this.checked ? map.map : null; for(i = 0; i < map.markers.length; i++) { if(!map.marker_in_filter(map.markers[i])) { map.markers[i].setMap(set); } } }, show_additional_markers); createOverlay('<img height="25px" src="' + marker_image_url("c", "FFCC00") + '" /> = Clubs, <img height="25px" src="' + marker_image_url("•", "FF867C") + '" /> = +Games'); set_map_layer(); } else if($(map).hasClass("map_picker")) { if(!lat_long) { set_map_marker(); } set_map_picker(); } else if($(map).hasClass("map_search")) { map.marker_in_filter = function(marker) { return true; }; load_search_markers(); } } function createOverlay(label, callback, checked) { this.overlayCount = (this.overlayCount ? this.overlayCount: 0) + 1; var name = "overlay" + this.overlayCount; if(callback) { checked = checked ? 'checked="checked"' : ""; label = '<input type="checkbox" ' + checked + ' name="' + name + '" id="' + name + '" /><label for="' + name + '">' + label + '</label>'; } var overlay = $('<div class="google_map_inlay '+ name +'" id="' + name + '">' + label + '</div>')[0]; if(callback) { $(overlay).children("input").change(callback); } map.map.controls[google.maps.ControlPosition.BOTTOM_RIGHT].push(overlay); } //var off_save_form_for_marker_change; function set_map_picker() { var map = $("#map")[0]; map.marker = new google.maps.Marker({ map:map.map, //draggable:true, //animation: google.maps.Animation.DROP, position: map.map.center }); if(!map.geocoder) { map.geocoder = new google.maps.Geocoder(); } /* setTimeout(function(){ var map = $("#map")[0]; map.infoWindow.setContent("<strong>Movable marker.</strong></br >" + (map.marker_not_set_by_default?"Type address to set.":"Move to change coordinates.")); map.infoWindow.open(map.map, map.marker); }, 500); setTimeout(function(){ var map = $("#map")[0]; map.infoWindow.close(map.map); map.map.setCenter(map.marker.getPosition()); }, 7000); google.maps.event.addListener(map.map, 'zoom_changed', function(event) { map.map.setCenter(map.marker.getPosition()); }); google.maps.event.addListener(map.marker, 'mouseup', function(event) { $('[name$="[Coordinates]"]').val(map.marker.position.lat() + ", " + map.marker.position.lng()); if(off_save_form_for_marker_change) { clearTimeout(off_save_form_for_marker_change); } setTimeout(function(){ var map = $("#map")[0]; map.infoWindow.close(map.map); map.infoWindow.setContent("<strong>Coordinates changed.</strong></br >Save the whole form to save."); map.infoWindow.open(map.map, map.marker); }, 500); off_save_form_for_marker_change = setTimeout(function(){ var map = $("#map")[0]; map.infoWindow.close(map.map); }, 4500); }); */ } function set_map_marker() { var fields = $(".country, .state, .city, .modern_address"); var address = ""; fields.each(function() { if($(this).val()) { address = $(this).val() + ", " + address; } }); if(address) { address = address.substring(0, address.length - 2); var map = $("#map")[0]; if(!map.geocoder) { map.geocoder = new google.maps.Geocoder(); } map.geocoder.geocode( { 'address': address}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { if(map.marker) { map.marker.position = results[0].geometry.location; map.marker.setMap(map.map); $('[name$="[Coordinates]"]').val(map.marker.position.lat() + ", " + map.marker.position.lng()); } else { map.marker_not_set_by_default = true; } var spots = results[0].address_components.length; map.map.setZoom(spots > 2 ? 12 : spots == 2 ? 6 : 3); map.map.setCenter(results[0].geometry.location); } }); } } /* Maps > Markers... */ function marker_image_url(letter, color) { return "https://chart.googleapis.com/chart?chst=d_map_pin_letter&chld=" + encodeURI(letter + "|" + color); } function custom_marker_and_shadow(letter, color) { var pinImage = new google.maps.MarkerImage(marker_image_url(letter, color), new google.maps.Size(21, 34), new google.maps.Point(0,0), new google.maps.Point(10, 34)); var pinShadow = new google.maps.MarkerImage("https://chart.apis.google.com/chart?chst=d_map_pin_shadow", new google.maps.Size(40, 37), new google.maps.Point(0, 0), new google.maps.Point(12, 35)); return [pinImage, pinShadow]; } var _orange_bullet_marker_and_shadow; function orange_bullet_marker_and_shadow() { if (!_orange_bullet_marker_and_shadow) { _orange_bullet_marker_and_shadow = custom_marker_and_shadow("c", "FFCC00"); } return _orange_bullet_marker_and_shadow; } function marker_click_function(map, marker, infoWindow, info_function) { return function() { infoWindow.close(map) infoWindow.setContent(info_function(marker)); infoWindow.open(map, marker); infoWindow.marker = marker; }; } function get_address_info_from_marker(marker, domain) { var city = "", state = "", country = "", address = "", borough = ""; if(marker.city) { address = marker.city + (marker.state ? ", " + marker.state : "") + (marker.country && marker.country != "United States" ? ", " + marker.country : ""); city = '<a target="_blank" href="' + domain + address.replace(/ /g, "_") + '">' + marker.city + '</a>'; } if(marker.borough) { address = marker.borough; borough = '<a target="_blank" href="' + domain + address.replace(/ /g, "_") + '">' + marker.borough + '</a>'; } if(marker.state) { address = marker.state + (marker.country && marker.country != "United States" ? ", " + marker.country : ""); state = '<a target="_blank" href="' + domain + address.replace(/ /g, "_") + '">' + marker.state + '</a>'; } if(marker.country) { country = '<a target="_blank" href="' + domain + marker.country.replace(/ /g, "_") + '">' + marker.country + '</a>'; } return ((city ? ", " + city : "") + (state ? ", " + state : "") + (country ? ", " + country : "")).replace(/^, /, ""); } function ballgames_info(marker, domain) { var map = $("#map")[0]; var domain = "https://" + document.domain + "/"; var address = get_address_info_from_marker(marker, domain); var infoHtml = ""; if(map.spread_markers || !marker.markers || marker.markers.length == 1) { infoHtml = '<strong><a target="_blank" href="' + domain + marker.title.replace(/ /g, "_") + '">' + marker.title + '</a></strong><br>'; if(marker.source_type == "Club") { infoHtml += marker.date + "<br>"; } infoHtml += address + "<br>"; if(marker.modern_address) { infoHtml += marker.modern_address + "<br>"; } if(marker.borough) { infoHtml += marker.borough + "<br>"; } if(marker.source_type != "Club") { infoHtml += marker.info + "<br>"; } if(marker.digger) { infoHtml += "Found by " + '<a target="_blank" href="' + domain + marker.digger.replace(/ /g, "_") + '">' + marker.digger + "</a><br>"; } return infoHtml; } else { infoHtml = '<strong>' + address + '</strong><br>'; infoHtml += marker.thingsTitle; infoHtml += "<br>"; var things = [marker.clubs, marker.games]; if(show_predecessor_games) { things.push(marker.predecessors) } for(var i in things) { for(var j in things[i]) { var thing = things[i][j]; infoHtml += '<a target="_blank" href="' + domain + thing.title.replace(/ /g, "_") + '">' + thing.title + '</a>' infoHtml += (things[i] == marker.clubs) ? " est. " + thing.year : ""; infoHtml += '<br>'; if(thing.digger) { infoHtml += " Found by " + '<a target="_blank" href="' + domain + thing.digger.replace(/ /g, "_") + '">' + thing.digger + "</a><br>"; } } } return infoHtml; } } /* ...Maps > Markers */ function spiral_coords(lat_long, i, zoom) { if(i <= 1) return lat_long; var angle = Math.sqrt(i); var a = 0; var b = 500; var r = 0.000002; var x = lat_long[1] + (r * (a + (b * angle)) * Math.cos(angle * 3)); var y = lat_long[0] + (r * .8 * (a + (b * angle)) * Math.sin(angle * 3)); return [y, x]; } function set_map_layer() { var map = $("#map")[0]; var classes = $(map).attr("class").split(" "); var map_types = []; for(var i in classes) { if(classes[i].indexOf("map") == 0) { map_types[map_types.length] = classes[i].substring("map_".length); } } var filter = ''; map.filters = {}; map.marker_in_filter = function(marker) { for(var filter in map.filters) { if(!(map.filters[filter] == marker[filter] || (marker[filter] && map.filters[filter] == '+'))) { return false; } } var isPred = marker.source_type == "Predecessor Game"; if(show_predecessor_games && !isPred) { return false; } if(!show_predecessor_games && isPred) { return false; } return true; }; var filters = ['Country', 'State', 'Borough', 'City']; for(var i in filters) { var text = $("#" + filters[i]).text(); if (!text) { continue; } map.filters[filters[i].toLowerCase()] = text; } ballgamesDataHandler(gamesAndClubs); } function ballgamesDataHandler(d) { var map = $("#map")[0]; var zoom = map.map.getZoom(); var reset = !!map.markers; if(reset) { for(var i in map.markers) { map.markers[i].setMap(null); } map.years = null; } if(map.infoWindow) map.infoWindow.marker = null; map.markers = []; var location_markers = {}; for (var i = 0; i < d.length; i++) { var row = d[i]; var location = row["Location"]; var lat_long = location.split(" "); lat_long[0] = parseFloat(lat_long[0]); lat_long[1] = parseFloat(lat_long[1]); if(!(location in location_markers)) { location_markers[location] = []; } var spiral_number = location_markers[location].length + 1; var spiral_lat_long = spiral_coords(lat_long, spiral_number, zoom); var date = row["Date"]; var year = parseInt(date.substring(date.length - 5)) var marker = new google.maps.Marker({ lat_long: lat_long, location: location, spiral_number: spiral_number, spiral_zoom: zoom, position: new google.maps.LatLng(spiral_lat_long[0], spiral_lat_long[1]), title: row["Title"], date: date, year: year, city: row["City"], borough: row["Borough"], state: row["State"], country: row["Country"], info: row["Info"], source_type: row["Type"], modern_address: row["Modern Address"], digger: row["Digger"], }); if(marker.source_type == "Club") { marker.set('icon', orange_bullet_marker_and_shadow()[0]); marker.set('shadow', orange_bullet_marker_and_shadow()[1]); } location_markers[location].push(marker); if(map.spread_markers || location_markers[location].length == 1) { var set = show_additional_markers || map.marker_in_filter(marker) ? map.map : null; marker.setMap(set); } if(map.marker_in_filter(marker)) { if(!map.years) { map.years = [year, year]; } else { map.years = [Math.min(map.years[0], year), Math.max(map.years[1], year)]; } } map.markers.push(marker); var click_function = marker_click_function(map.map, marker, map.infoWindow, ballgames_info); google.maps.event.addListener(marker, 'click', click_function); } if(map.years) { map.base_years = [map.years[0], map.years[1]]; map.filter_years = [map.years[0], map.years[1]]; set_map_boundries(); if(reset && $("#slider")[0].is_setup) { slider_reset(); } else { slider_setup(); } set_marker_markers(location_markers); } } function set_map_boundries() { var map = $("#map")[0]; var bounds = new google.maps.LatLngBounds(); var some_bounds = false; for(var i in map.markers) { if(!map.marker_in_filter(map.markers[i])) continue; bounds.extend(map.markers[i].getPosition()); some_bounds = true; } if (some_bounds) fitBounds(map.map, bounds); } function fitBounds(map, bounds) { if(!map.zoomListenerSet) { map.zoomListenerSet = true; google.maps.event.addListener(map, 'bounds_changed', function(event) { if (this.getZoom() > 13 && this.fitBoundsCall == true) { this.setZoom(13); this.fitBoundsCall = false; } }); } map.fitBoundsCall = true; map.fitBounds(bounds); } function search_entries_data_handler(entries) { var map = $("#map")[0]; var zoom = map.map.getZoom(); map.markers = []; var location_markers = {}; $.each(entries, function(index, entry) { var location = entry.coordinates; if(!location) { return; } var lat_long = location.split(" "); lat_long[0] = parseFloat(lat_long[0]); lat_long[1] = parseFloat(lat_long[1]); if(!(location in location_markers)) { location_markers[location] = []; } var spiral_number = location_markers[location].length + 1; var spiral_lat_long = spiral_coords(lat_long, spiral_number, zoom); var date = entry.date; var year = date ? parseInt(date.substring(0, 4)): null; var marker = new google.maps.Marker({ lat_long: lat_long, location: location, spiral_number: spiral_number, spiral_zoom: zoom, position: new google.maps.LatLng(spiral_lat_long[0], spiral_lat_long[1]) }); if(year) { marker.year = year; marker.date = date; } marker.info_keys = []; $.each(entry, function(key, value) { marker[key] = entry[key]; marker.info_keys.push(key); }); location_markers[location].push(marker); if(map.spread_markers || location_markers[location].length == 1) { marker.setMap(map.map); } if(year) { if(!map.years) { map.years = [year, year]; } else { map.years = [Math.min(map.years[0], year), Math.max(map.years[1], year)]; } } map.markers.push(marker); var click_function = marker_click_function(map.map, marker, map.infoWindow, search_entry_info); google.maps.event.addListener(marker, 'click', click_function); }); if(map.years) { map.base_years = [map.years[0], map.years[1]]; map.filter_years = [map.years[0], map.years[1]]; set_map_boundries(); slider_setup(); set_marker_markers(location_markers); } } function search_entry_info(marker) { var map = $("#map")[0]; var domain = "https://" + document.domain + "/"; var address = get_address_info_from_marker(marker, domain); var infoHtml = ""; if(map.spread_markers || !marker.markers || marker.markers.length == 1) { infoHtml = '<strong><a target="_blank" href="' + domain + marker.title.replace(/ /g, "_") + '">' + (marker.title_text || marker.title) + '</a></strong><br>'; if(marker.source_type == "Club") { infoHtml += marker.date + "<br>"; } infoHtml += address + "<br>"; if(marker.modern_address) { infoHtml += marker.modern_address + "<br>"; } if(marker.borough) { infoHtml += marker.borough + "<br>"; } $.each(marker.info_keys, function(index, key) { if(['title', 'city', 'borough', 'state', 'country', 'name', 'coordinates', 'source_type'].indexOf(key) == -1) { infoHtml += key + ": " + marker[key].substring(0,40) + (marker[key].length > 40 ? "..." : "") + "<br>"; } }) if(marker.digger) { infoHtml += "Found by " + '<a target="_blank" href="' + domain + marker.digger.replace(/ /g, "_") + '">' + marker.digger + "</a><br>"; } return infoHtml; } else { infoHtml = '<strong>' + address + '</strong><br>'; infoHtml += marker.thingsTitle; infoHtml += "<br>"; var things = [marker.clubs, marker.games, marker.others]; for(var i in things) { for(var j in things[i]) { var thing = things[i][j]; infoHtml += '<a target="_blank" href="' + domain + thing.title.replace(/ /g, "_") + '">' + (thing.title_text || thing.title) + '</a>' infoHtml += (things[i] == marker.clubs) ? " est. " + thing.year : ""; infoHtml += '<br>'; if(thing.digger) { infoHtml += " Found by " + '<a target="_blank" href="' + domain + thing.digger.replace(/ /g, "_") + '">' + thing.digger + "</a><br>"; } } } return infoHtml; } } function set_map_trigger(script) { this.scripts = this.scripts || {}; this.scripts[script] = true; if (Object.keys(this.scripts).length == 2) { set_map(); } } if($('#map').length > 0) { $.getScript('https://maps.googleapis.com/maps/api/js?sensor=false&async=2&key=' + google_api_key, function() { set_map_trigger('googleapis'); }); $.ajax({ dataType: "json", url: '/games_and_clubs.json', cache: true, beforeSend: function(xhr) { xhr.setRequestHeader('Cache-Control', 'private'); xhr.setRequestHeader('Pragma', 'cache=yes'); }, success: function(data) { gamesAndClubs = data; set_map_trigger('json'); } }); } /* Maps > UI slider... */ if($('.slider, .tabs').length > 0) { $.getScript('/jquery-ui/js/jquery-ui-1.8.23.custom.min.js', ui_setup); } function ui_setup() { $('.tabs').each(function() { $(this).tabs(); $(this).removeClass("ui-widget ui-widget-content"); $(this).find(".scrollable").removeClass("ui-widget-content"); }); slider_setup(); } function slider_setup() { if($("#map").length > 0 && $("#map")[0].years && $("#slider").slider && $("#slider").length > 0 && !$("#slider")[0].is_setup) { var map = $("#map")[0]; $('<div id="slider-one-year" class="slider" style="display: none"></div>').insertAfter("#slider"); $("#slider").slider({ range: true, min: map.years[0], max: map.years[1], values: map.years, change: function( event, ui ) { map.years = [parseInt(ui.values[0]), parseInt(ui.values[1])]; }, slide: function( event, ui ) { var slider = $("#slider")[0]; if(event) { var old_values = map.years; map.years = [parseInt(ui.values[0]), parseInt(ui.values[1])]; if(slider.mode && slider.mode == "freeze_ranges") { var old_diff = old_values[1] - old_values[0]; var new_diff = map.years[1] - map.years[0]; if(old_diff != new_diff) { var index = (old_values[0] == map.years[0]) ? 0 : 1; var value = index == 0 ? Math.max(map.years[1] - old_diff, map.base_years[0]) : Math.min(map.years[0] + old_diff, map.base_years[1]); map.years[index] = value; $(slider).slider("values", index, value); } } } else if (slider.mode && slider.mode == "freeze_ranges") { if(map.years[0] == map.base_years[0] && map.years[1] == map.base_years[1]) { map.years[1] = Math.min(map.years[1], map.years[0] + 1); $(slider).slider("values", 1, map.years[1]); } } set_slider_text(map.years); map.filter_years = map.years; filter_map_years(); } }); $("#slider-one-year").slider({ min: map.years[0], max: map.years[1], value: map.years[0], slide: function( event, ui ) { if(event) { map.year = parseInt(ui.value); } else if(!map.year) { map.year = map.years[0]; $("#slider-one-year").slider("value", map.year); } set_slider_text([map.year]); map.filter_years = [map.year, map.year]; filter_map_years(); } }); $("#slider")[0].is_setup = true; set_slider_text(map.years); $('<div class="slider_opts"><input type="radio" name="slider_group" value="standard" id="standard_slide" checked="checked" /> Standard <input type="radio" name="slider_group" value="freeze_ranges" id="freeze_slide" /> Freeze Range <input type="radio" name="slider_group" value="one_year" id="one_year_slide" /> One Year At a Time</div>').insertBefore("#slider-values"); $("#standard_slide, #freeze_slide").click(function() { var slider = $("#slider"); slider[0].mode = $(this).val(); $("#slider-one-year").hide(); slider.show(); slider.slider('option', 'slide').call(slider); }); $("#one_year_slide").click(function() { var slider = $("#slider-one-year"); $("#slider").hide(); slider.show(); slider.slider('option', 'slide').call(slider); }); } } function slider_reset() { var map = $("#map")[0]; map.year = map.years[0]; $("#slider, #slider-one-year").slider("option", "min", map.years[0] ); $("#slider, #slider-one-year").slider("option", "max", map.years[1] ); map.years = map.prev_years ? map.prev_years : map.years; map.year = map.prev_year ? map.prev_year : map.year; map.prev_years = $("#slider").slider("option", "values"); map.prev_year = $("#slider-one-year").slider("option", "value"); $("#slider").slider("option", "values", map.years); $("#slider-one-year").slider("option", "value", map.year); set_slider_text($("#one_year_slide")[0].checked ? [map.years[0]] : map.years); } function year_link(year, back_or_forwards, displayed, left_or_right) { back_or_forwards = displayed ? back_or_forwards : "nowhere"; return '<a href="#" id="move_map_' + year + '_' + back_or_forwards + '" class="move_map_year"' + (displayed?'':' style="color:white;"') + '><i class="icon-chevron-' + left_or_right + '"></i></a>'; } function set_slider_text(years) { var map = $("#map")[0]; var label = years.length > 1 ? "Years: " : "Year: "; var link = ""; var range_mode = years.length == 2; var frozen_range_mode = range_mode && $("#slider")[0].mode == "freeze_ranges"; for(var i in years) { var handle = years.length == 1 ? "year" : "year" + i; var show_left_link = years[i] > map.base_years[0] && (!range_mode || !(i == 1 && years[0] == years[1])) && (!frozen_range_mode || i == 0); var show_right_link = years[i] < map.base_years[1] && (!range_mode || !(i == 0 && years[0] == years[1])) && (!frozen_range_mode || i == 1); if(i == 1) { link += " - "; } link += year_link(handle, "back", show_left_link, "left"); link += ' ' + years[i] + ' '; link += year_link(handle, "forward", show_right_link, "right"); } $("#slider-values").html(label + link); $(".move_map_year").click(adjust_map_by_one); } function adjust_map_by_one() { var map = $("#map")[0]; var info = this.id.split("_"); var handle = info[2]; var move = info[3]; if(move == "nowhere") return false; var slider; if(handle == "year") { map.year += move == "forward" ? 1: -1; slider = $("#slider-one-year"); slider.slider("value", map.year); } else { slider = $("#slider"); if(slider[0].mode == "freeze_ranges") { map.years[0] += move == "forward" ? 1: -1; map.years[1] += move == "forward" ? 1: -1; } else { var i = parseInt(handle.substr(4)); map.years[i] += move == "forward" ? 1: -1; } slider.slider("values", map.years); } slider.slider('option', 'slide').call(slider); return false; } function filter_map_years() { var map = $("#map")[0]; var zoom = map.map.getZoom(); var location_markers = {}; for(var i in map.markers) { var marker = map.markers[i]; var on = false; var reset = false; if(marker.year) { // allow for markers beyond filter years to show when the range is at the extreme points if((map.base_years[0] == map.filter_years[0] || marker.year >= map.filter_years[0]) && (map.base_years[1] == map.filter_years[1] || marker.year <= map.filter_years[1])) { var location = marker.location; if(!(location in location_markers)) { location_markers[location] = []; } location_markers[location].push(marker); var location_count = location_markers[location].length; if(map.spread_markers || location_count == 1) { on = true; if(marker.spiral_number != location_markers[location].length || marker.spiral_zoom != zoom) { var spiral_lat_long = spiral_coords(marker.lat_long, location_count, zoom); marker.position = new google.maps.LatLng(spiral_lat_long[0], spiral_lat_long[1]); marker.spiral_number = location_count; marker.spiral_zoom = zoom; reset = true; if(marker.source_type == "Club") { marker.set('icon', orange_bullet_marker_and_shadow()[0]); marker.set('shadow', orange_bullet_marker_and_shadow()[1]); } } } } } if(on && (!marker.map || reset)) { var set = show_additional_markers || map.marker_in_filter(marker) ? map.map : null; marker.setMap(set); } else if(!on) { marker.setMap(null); } } set_marker_markers(location_markers); } function set_marker_markers(location_markers) { for(var location in location_markers) { var marker = location_markers[location][0]; marker.markers = location_markers[location]; if(marker.markers.length > 1) { marker.clubs = []; marker.games = []; marker.predecessors = []; marker.others = []; for(var i in marker.markers) { var thing = (marker.markers[i].source_type == "Club") ? marker.clubs : (marker.markers[i].source_type == "Ballgame") ? marker.games : (marker.markers[i].source_type == "Predecessor Game") ? marker.predecessors : marker.others; thing.push(marker.markers[i]); } marker.thingsTitle = ""; if(marker.clubs.length > 0) { marker.thingsTitle += marker.clubs.length + " club" + (marker.clubs.length > 1?"s":""); if(marker.games.length == 0) { marker.set('icon', orange_bullet_marker_and_shadow()[0]); marker.set('shadow', orange_bullet_marker_and_shadow()[1]); } } if(marker.games.length > 0) { if(marker.thingsTitle) { marker.thingsTitle += (show_predecessor_games && marker.predecessors.length > 0) ? ", " : " and "; } marker.thingsTitle += marker.games.length + " ballgame" + (marker.games.length > 1?"s":""); marker.set('icon', null); marker.set('shadow', null); } if(show_predecessor_games && marker.predecessors.length > 0) { if(marker.thingsTitle) { marker.thingsTitle += marker.thingsTitle.indexOf(",") > -1 ? ", and " : " and " } marker.thingsTitle += marker.predecessors.length + " predecessor game" + (marker.predecessors.length > 1?"s":""); } if(marker.others.length > 0) { if(marker.thingsTitle) { marker.thingsTitle += marker.thingsTitle.indexOf(",") > -1 ? ", and " : " and " } marker.thingsTitle += marker.others.length + " other" + (marker.others.length > 1?"s":""); } var address = marker.city + (marker.state ? ", " + marker.state : "") + (marker.country && marker.country != "United States" ? ", " + marker.country : ""); if(marker.ee) { marker.ee.title = address + ": " + marker.thingsTitle; } } else { if(marker.ee) { marker.ee.title = marker.title; } } if(map.infoWindow.marker == marker) { map.infoWindow.close(); map.infoWindow.marker = null; } } } /* ...Maps > slider UI */ /* ...Maps */ var tinymce_changed_func = function(inst) {} function tinymce_changed(inst) { tinymce_changed_func(inst); } function listen_for_free_text() { var has = $('[name="Chronology Entry[Has Supplemental Text][value]"], [name="Game[Has Supplemental Text][value]"], [name="Club[Has Supplemental Text][value]"]')[0]; tinymce_changed_func = function(inst) { if(inst.id == "sf_free_text") { var body = inst.getBody(); text = tinymce.trim(body.innerText || body.textContent); has.checked = text.length > 0; } } } function setAutocompleteUsingMapValues() { if (!gamesAndClubs.length) { setTimeout(function() { setAutocompleteUsingMapValues(); }, 100); return; } var city = new ClassProp("city", "City"); var borough = new ClassProp("borough", "Borough"); var state = new ClassProp("state", "State"); var home_away = new ClassProp("home_team, .away_team", "Title"); var field = new ClassProp("field", "Title"); set_autocomplete(state); $(".state").change(function() { var stateInput = $(".state"); var stateVal = stateInput.val(); var stateFilter = !stateVal ? null : function(thing) { return thing["State"] == stateVal; } set_autocomplete(city, stateFilter); set_autocomplete(borough, stateFilter); }).change(); set_autocomplete(home_away, function(thing) { return thing["Type"] == "Club"; }); //$(".city").change(function(){set_autocomplete(field, [city, state], "[[Category:" + "Fields]]")}).change(); } function formPrep() { if(wgPageName.indexOf("Special:FormEdit") > -1 || wgAction.indexOf("formedit") > -1) { $('.allow_new .checkboxesSpan').each(add_new_input); $('.set_none_to_unknown_for_enumerated_radio_buttons .radioButtonSpan').each(set_none_to_unknown_for_enumerated_radio_buttons); $('.set_none_value_for_enumerated_radio_buttons .radioButtonSpan').each(set_none_value_for_enumerated_radio_buttons); /* for Chronology */ $('.salience').each(set_salience_names); $('[name="Chronology Entry[Year]"]').change(populate_chron_year_number); /* for Games */ $('.sort_eras_chronologically .checkboxesSpan').each(sort_eras_chronologically); /* for Diggers */ $('[name="Digger Activity[Digger Activity Date][day]"]').each(default_to_one_and_hide); /* for Ballgames... */ $(".type_of_date").change(set_date_by_type_of_date).change(); $(".ballgame_name").parents("form").submit(set_ballgame_name); setAutocompleteUsingMapValues(); $(".country, .state, .city, .modern_address").change(set_map_marker); /* ...Ballgames */ /* Editors... */ if(wgAction.indexOf("formedit") > -1) { $('textarea.wikiEditor_on_edit').attr('class','wikiEditor'); } if($('textarea.wikiEditor').length > 0) { $(function(){mw.loader.using("ext.semanticforms.wikieditor",function(){$('textarea.wikiEditor').SemanticForms_registerInputInit(window.ext.wikieditor.init, null);});}); } $('[name="Chronology Entry[Has Supplemental Text][value]"], [name="Game[Has Supplemental Text][value]"], [name="Club[Has Supplemental Text][value]"]').each(listen_for_free_text); if($('textarea.tinymce').length == 0) return; $.getScript("/tinymce/jscripts/tiny_mce/jquery.tinymce.js", function() { $('textarea.tinymce').each(function() { var id = this.id; var opts = { // Location of TinyMCE script script_url : '/tinymce/jscripts/tiny_mce/tiny_mce.js', // General options theme : "advanced", plugins : "pagebreak,style,layer,save,advhr,advimage,advlink,iespell,inlinepopups,insertdatetime,preview,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,table,spellchecker,heading", // Theme options theme_advanced_buttons1 : "spellchecker,|,tablecontrols" + ($(this).hasClass("with_headings") ? ",|,h2,h3,h4" : ""), theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,undo,redo,|,hr,nonbreaking,removeformat,visualaid,|,sub,sup,|,charmap,iespell,advhr,|,fullscreen", theme_advanced_buttons3 : "bold,italic,underline,strikethrough,|,bullist,numlist,|,link,unlink,|,outdent,indent,blockquote,|justifyleft,justifycenter,justifyright,justifyfull,|,cleanup,help,code" , theme_advanced_toolbar_location : "top", theme_advanced_toolbar_align : "left", theme_advanced_statusbar_location : "bottom", theme_advanced_resizing : true, theme_advanced_path : false, spellchecker_languages : "+English=en", heading_clear_tag : "p", extended_valid_elements: "ref,references", content_css : "/tinymce/css/custom_content.css", theme_advanced_font_sizes: "10px,12px,13px,14px,16px,18px,20px", font_size_style_values : "10px,12px,13px,14px,16px,18px,20px", width: "600", onchange_callback : "tinymce_changed", gecko_spellcheck : true }; if($(this).hasClass("simple")) { delete opts["theme_advanced_buttons2"]; delete opts["theme_advanced_buttons3"]; opts["theme_advanced_buttons1"] = "bold,italic,underline,|,sub,sup,|,link,unlink,|,spellchecker,|,cleanup,help,code"; } $(this).tinymce(opts); }); }); /* ...Editors */ } } $('.field_me').replaceWith(function(){ return '<input type="hidden" name="' + $(this).data('name') + '" value="' + $(this).data('value') + '" />'; }); $(".subnav_list_box a").each(function() { if(!this.href){ $(this).attr("href", "#"); $(this).click(function() { $(".subnav_list_items").toggle(); $(".subnav_add_items").hide(); return false; }) } }); $(".subnav_add_box a").each(function() { if(!this.href){ $(this).attr("href", "#"); $(this).click(function() { $(".subnav_add_items").toggle(); $(".subnav_list_items").hide(); return false; }) } }); function changeEditLinksToTopLinks() { if(wgPageName.indexOf("List_of_Diggers") > -1) { $(".editsection a").attr("href", "#top").text("↑ top"); } } // have searches use a get so the url can be shared $('#sfForm[action="/Special:RunQuery/Chronology_Search"]').each(function(){this.method = "get";}); // runquery results don't use parser functions except for within the ask call // so, we hide the header listings // then reveal only the lines with any values $(".hide_unless_span_content").each(function() { var text = $(this).children('span').text() if(text.length > 0 && text != "No") { $(this).show(); if(text == "Yes") { $(this).children('span').hide(); } } }); var scroll_height = 0; $(".scrollable").each(function() { if(!scroll_height) { scroll_height = $(window).height() - $(this).offset().top - 60; } $(this).css('height', scroll_height); $(this).css('overflow', "auto"); }); $("#searchGoButton").click(function() { $(this).parent().children()[0].name="text"; $(this).parent().children(":last").remove(); this.form.method = "get"; this.form.action="/Special:EnhancedSearch"; }); $("#searchGoButton").insertAfter("#mw-searchButton").val("Enhanced").show(); $('.tip_link a').attr("target","_blank"); $('.stats').each(function() { $(this).find("td:not(:hidden):last").addClass("table_turner_container").append('<a href="" class="table_turner"><i class="icon-cut"></i></a>'); }); $(".table_turner").click(function() { turn_table($(this).parents(".stats")); return false; }) var chron_re = /^\d+.?\.\d+$/; turn_table = function(table) { var offset = table.offset(); var div = $('<div id="turned" style="position: absolute; z-index: 10; top: ' + Math.round(offset.top) + 'px; width: 400px; left: ' + (offset.left + Math.round(table.width()/2) - 200) + 'px"><a id="close_entry" href="#" style="font-size: 30px; display: block; text-align: right; position: relative; left: 1em;"><i class="icon-remove-circle"></i></a><iframe id="turned_list" style="height: 300px; width: 380px; background-color: white;" src="about:blank"></iframe></div>'); $("body").append(div); var merge = function() { var inner = div.children("iframe").contents().find('body'); var title = $("#firstHeading span").text(); inner.append($('<b><a target="_blank" href="/' + title + '">' + (chron_re.test(title) ? "Protoball Chronology #" : "") + title + '</a></b><br /><br />')); var subtitle = $(".subtitle").text(); if(subtitle) { inner.append($('<b>' + $(".subtitle").text() + '</b><br /><br />')); } var rows = table.find("tr:not(:hidden)"); for(var i = 0; i < rows.length; i++) { var td = $(rows[i]).find("td"); var text = td.html(); var isPara = td.find("p").length > 0; inner.append($('<b>' + $(rows[i]).find("th").html() + '</b>' + (isPara ? "" : '<br />') + text + (isPara ? "" : '<br /><br />'))); } inner.find(".hidden").remove(); } setTimeout(merge, 500); div.find(".admin").remove(); $("#close_entry").click(function() { $("#turned").remove(); return false; }); return false; } var pull_toggle_a = $("<a href='#' id='pull_toggle'>show</a>"); pull_toggle_a.click(function() { var text = $(this).text(); text = text == "show" ? "hide" : "show"; $(this).text(text); $(".pull_list").toggle(); if(text == "hide") {$("#pull_entry").empty();} return false; }); $(".pull_list_container span").append("[", pull_toggle_a, "]").addClass("toctoggle"); $(".pull_list").after('<div style="position:absolute; margin: 1em auto;" id="pull_entry"></div>'); $(".pull_list a").each(function() { this.entry_title = this.title; this.title ="Click to see entry"; $(this).click(function() { var entry = $(".chron_entry_side_text a[title='" + this.entry_title + "']").parents(".chron_entry_wrapper_outer").get(0); entry = $(entry).clone(); var x = $("<div style='position:absolute; right: 0; z-index: 10;'><a id='close_entry' href='#' style='font-size: 30px;'><i class='icon-remove-circle'></i></a></div>"); $("#pull_entry").empty().append(x, entry); $("#close_entry").click(function() { $("#pull_entry").empty(); return false; }); return false;}); }); var toc_default_set = $.cookie('mw_hidetoc_default_set'); if(!toc_default_set) { $.cookie('mw_hidetoc_default_set', true, { expires: 30, path: '/' } ); $.cookie('mw_hidetoc', '1', { expires: 30, path: '/' } ); } if($(".sup_text").length) { $("#catlinks").before('<div class="chron_back_link"></div>'); } var chron_back_links = $(".chron_back_link"); if(chron_back_links.length) { var referrer = document.referrer; if(referrer && (referrer.indexOf("Chronology:") > -1 || referrer.indexOf("Prominent") > -1)) { if(referrer.indexOf("#") == -1) { referrer += "#" + escape(chron_back_links.text().replace(/ /g, "_")).replace(/%/g, ".").replace(/\.3A/g, ":").replace(/\.22$/, ""); } chron_back_links.html('<a href="' + referrer + '">Back to Chronology Listing</a>'); } } var infobox_t = $('<div class="infobox_toggle"><a href="#">Toggle Subnav</a></div>'); infobox_t.click(function() { $('.infobox').toggle(); return false; }); $('.infobox').first().parent().append(infobox_t); var add_pages = $(".nice .icon-plus-sign"); if(add_pages.length) { $("#mw-panel").append($('<div class="portal"><h5>Legend</h5><div class="body"><ul><li><a href="#"><i class="icon-plus-sign" style="font-size:200%; line-height: 1.5"></i></a></li><li>Click the item’s <i class="icon-plus-sign"></i> icon to add a new page of information for the item.</li></div>')); } $("#discussion_below").each(function() { $("#mw-content-text").append($(this)); $(this).show(); }); $('.reveal').each(function() { var $this = $(this); $this.before($('<a href="#">' + ($this.data("title") || 'Reveal') + '</a>').click(function() { $this.show(); $(this).hide(); return false; }) ) }); function getRandomInt (min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } $('.pick_random').each(function() { var $this = $(this); var lis = $this.find("li"); lis.hide(); var limit = $this.data("number"); for(var i = 0; i < limit; ) { var index = getRandomInt(0,lis.length -1); var li = $(lis[index]); if(li.css('display') == 'none') { li.show(); i++; } } }).show(); var is_admin = $("#pt-adminlinks").length > 0; var is_editor = isEditor(); var is_super_editor = isSuperEditor(); if(is_admin || is_super_editor) { $(".admin, .editsection").show(); } else { $(".new a").each(function() { this.href += "&namespace=new" }); } if(is_admin || wgUserName == "JKittel") { $(".gloss_admin").show(); } if(is_admin || is_super_editor) { $(".prepro_admin").show(); } var is_editor = isEditor(); if(is_admin || is_editor) { $(".admin").show(); } else { $(".editsection").hide(); } $('table.sortable').before("<div class='sortable_table_marquee'><div>Sortable</div></div>") function appendBallgameStats() { var table = $('table.ballgame-table'); if (!table.length) { return; } var gamesWithScores = 0; var runs = 0; var winningRuns = 0; var losingRuns = 0; var rows = table.find('tbody tr'); for(var i = 0; i < rows.length; i++) { var score = rows.eq(i).find("td").eq(7).text(); var scores = score.split(' - '); if (scores.length < 2) { continue; } gamesWithScores++; var run1 = +scores[0]; var run2 = +scores[1]; runs += run1 + run2; if (run1 > run2) { winningRuns += run1; losingRuns += run2; } else { winningRuns += run2; losingRuns += run1; } } if (!gamesWithScores) { return; } var runsAvg100 = Math.round(100 * runs/(gamesWithScores * 2)); var winningRunsAvg100 = Math.round(100 * winningRuns/gamesWithScores); var losingRunsAvg100 = Math.round(100 * losingRuns/gamesWithScores); var text = " Ballgames with Scores: " + gamesWithScores; text += ", Average Runs: " + format100(runsAvg100); text += ", Average Winning Runs: " + format100(winningRunsAvg100); text += ", Average Losing Runs: " + format100(losingRunsAvg100); table.after('<div class="ballgame-table-stats">' + text + ' </div>') } function format100(x) { var modulo = x % 100; if (modulo < 10) { modulo = '0' + modulo } return "" + Math.floor(x / 100) + '.' + modulo } appendBallgameStats(); function isEditor() { for(var i in wgUserGroups) { if(wgUserGroups[i] == "editor") return true; }; return false; } function isSuperEditor() { for(var i in wgUserGroups) { if(wgUserGroups[i] == "supereditor") return true; }; return false; } addOnloadHook(formPrep); addOnloadHook(changeEditLinksToTopLinks); function embedPdf(url, id) { var embed = function() { var myPDF = new PDFObject({ url: url, pdfOpenParams: { view: 'FitH' } }).embed(id); }; if(window.PDFObject) { embed(); } else { $.getScript('/js/pdfobject.js', embed); } } (function boroughColumnAdjust() { var boroughTables = $(".borough_header").parents("table"); boroughTables.each(function() { var pos = $(this).find(".borough_header").parent().index(); if(pos == -1) return; var cellsWithInfo = $(this).find("td").filter( function() { return $(this).index() == pos && $.trim($(this).text()); }).length; if(!cellsWithInfo) { $(this).find("th, td").filter( function() { return $(this).index() == pos }).hide(); } }); }());