forked from edward/owl-map
		
	Reorganise code
This commit is contained in:
		
							parent
							
								
									02563beb65
								
							
						
					
					
						commit
						662df3dde2
					
				| 
						 | 
					@ -12,7 +12,6 @@ if (start_lat || start_lng) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var map = L.map("map", options);
 | 
					var map = L.map("map", options);
 | 
				
			||||||
var group = L.featureGroup();
 | 
					 | 
				
			||||||
var items = {};
 | 
					var items = {};
 | 
				
			||||||
var wikidata_items = {};
 | 
					var wikidata_items = {};
 | 
				
			||||||
var osm_objects = {};
 | 
					var osm_objects = {};
 | 
				
			||||||
| 
						 | 
					@ -23,8 +22,7 @@ var load_text = document.getElementById("load-text");
 | 
				
			||||||
var isa_card = document.getElementById("isa-card");
 | 
					var isa_card = document.getElementById("isa-card");
 | 
				
			||||||
var checkbox_list = document.getElementsByClassName("isa-checkbox");
 | 
					var checkbox_list = document.getElementsByClassName("isa-checkbox");
 | 
				
			||||||
var isa_labels = {};
 | 
					var isa_labels = {};
 | 
				
			||||||
var connections = {};
 | 
					
 | 
				
			||||||
map.addLayer(group);
 | 
					 | 
				
			||||||
map.zoomControl.setPosition("topright");
 | 
					map.zoomControl.setPosition("topright");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
map.on("moveend", function (e) {
 | 
					map.on("moveend", function (e) {
 | 
				
			||||||
| 
						 | 
					@ -88,6 +86,17 @@ function load_complete() {
 | 
				
			||||||
  load_text.classList.remove("visually-hidden");
 | 
					  load_text.classList.remove("visually-hidden");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function add_to_feature_group(qid, thing) {
 | 
				
			||||||
 | 
					  if (items[qid] === undefined) items[qid] = {};
 | 
				
			||||||
 | 
					  if (items[qid].group === undefined) items[qid].group = L.featureGroup();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  var group = items[qid].group;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  thing.addTo(group);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return group;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function update_wikidata() {
 | 
					function update_wikidata() {
 | 
				
			||||||
  if (
 | 
					  if (
 | 
				
			||||||
    Object.keys(wikidata_items).length === 0 ||
 | 
					    Object.keys(wikidata_items).length === 0 ||
 | 
				
			||||||
| 
						 | 
					@ -113,7 +122,8 @@ function update_wikidata() {
 | 
				
			||||||
      marker_data.marker.setIcon(greenMarker);
 | 
					      marker_data.marker.setIcon(greenMarker);
 | 
				
			||||||
      osm_list.forEach((osm) => {
 | 
					      osm_list.forEach((osm) => {
 | 
				
			||||||
        var path = [osm.centroid, marker_data];
 | 
					        var path = [osm.centroid, marker_data];
 | 
				
			||||||
        var polyline = L.polyline(path, { color: "green" }).addTo(group);
 | 
					        var polyline = L.polyline(path, { color: "green" });
 | 
				
			||||||
 | 
					        add_to_feature_group(qid, polyline);
 | 
				
			||||||
        item.lines.push(polyline);
 | 
					        item.lines.push(polyline);
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
| 
						 | 
					@ -157,49 +167,19 @@ function checkbox_change() {
 | 
				
			||||||
    if (checkbox.checked) ticked.push(checkbox.id.substr(4));
 | 
					    if (checkbox.checked) ticked.push(checkbox.id.substr(4));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  for (const qid in wikidata_items) {
 | 
					  for (const qid in items) {
 | 
				
			||||||
    var item = wikidata_items[qid];
 | 
					    var item = items[qid];
 | 
				
			||||||
    const item_isa_list = wikidata_items[qid]["isa_list"];
 | 
					
 | 
				
			||||||
 | 
					    if (item.isa_list === undefined) continue;
 | 
				
			||||||
 | 
					    const item_isa_list = item.isa_list;
 | 
				
			||||||
    const intersection = ticked.filter((isa_qid) =>
 | 
					    const intersection = ticked.filter((isa_qid) =>
 | 
				
			||||||
      item_isa_list.includes(isa_qid)
 | 
					      item_isa_list.includes(isa_qid)
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
    if (item.lines) {
 | 
					 | 
				
			||||||
      item.lines.forEach((line) => {
 | 
					 | 
				
			||||||
        if (intersection.length) {
 | 
					 | 
				
			||||||
          line.addTo(group);
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
          line.removeFrom(group);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      });
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    item.markers.forEach((marker_data) => {
 | 
					 | 
				
			||||||
      var marker = marker_data.marker;
 | 
					 | 
				
			||||||
    if (intersection.length) {
 | 
					    if (intersection.length) {
 | 
				
			||||||
        marker.addTo(group);
 | 
					      item.group.addTo(map);
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        marker.removeFrom(group);
 | 
					      item.group.removeFrom(map);
 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (osm_objects[qid]) {
 | 
					 | 
				
			||||||
      osm_objects[qid].forEach((osm) => {
 | 
					 | 
				
			||||||
        if (intersection.length) {
 | 
					 | 
				
			||||||
          osm.marker.addTo(group);
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
          osm.marker.removeFrom(group);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      });
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (items[qid]) {
 | 
					 | 
				
			||||||
      items[qid].geojson.forEach((geojson) => {
 | 
					 | 
				
			||||||
        if (intersection.length) {
 | 
					 | 
				
			||||||
          geojson.addTo(map);
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
          geojson.removeFrom(map);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      });
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -247,6 +227,7 @@ function set_isa_list(isa_count) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function add_wikidata_marker(item, marker_data) {
 | 
					function add_wikidata_marker(item, marker_data) {
 | 
				
			||||||
  var icon = blueMarker;
 | 
					  var icon = blueMarker;
 | 
				
			||||||
 | 
					  var qid = item.qid;
 | 
				
			||||||
  var label = `${item.label} (${item.qid})`;
 | 
					  var label = `${item.label} (${item.qid})`;
 | 
				
			||||||
  var marker = L.marker(marker_data, { icon: icon });
 | 
					  var marker = L.marker(marker_data, { icon: icon });
 | 
				
			||||||
  // var tooltip = marker.bindTooltip(item.qid, {permanent: true, direction: 'bottom', opacity: 0.5});
 | 
					  // var tooltip = marker.bindTooltip(item.qid, {permanent: true, direction: 'bottom', opacity: 0.5});
 | 
				
			||||||
| 
						 | 
					@ -269,7 +250,8 @@ function add_wikidata_marker(item, marker_data) {
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  popup += "</p>";
 | 
					  popup += "</p>";
 | 
				
			||||||
  marker.bindPopup(popup);
 | 
					  marker.bindPopup(popup);
 | 
				
			||||||
  marker.addTo(group);
 | 
					  var group = add_to_feature_group(item.qid, marker);
 | 
				
			||||||
 | 
					  group.addTo(map);
 | 
				
			||||||
  marker_data.marker = marker;
 | 
					  marker_data.marker = marker;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -291,13 +273,17 @@ function load_wikidata_items() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  axios.get(items_url, { params: params }).then((response) => {
 | 
					  axios.get(items_url, { params: params }).then((response) => {
 | 
				
			||||||
    set_isa_list(response.data.isa_count);
 | 
					    set_isa_list(response.data.isa_count);
 | 
				
			||||||
    var items = response.data.items;
 | 
					    var load_items = response.data.items;
 | 
				
			||||||
    items.forEach((item) => {
 | 
					    load_items.forEach((item) => {
 | 
				
			||||||
 | 
					      var qid = item.qid;
 | 
				
			||||||
      if (item.qid in wikidata_items) return;
 | 
					      if (item.qid in wikidata_items) return;
 | 
				
			||||||
      item.markers.forEach((marker_data) =>
 | 
					      item.markers.forEach((marker_data) =>
 | 
				
			||||||
        add_wikidata_marker(item, marker_data)
 | 
					        add_wikidata_marker(item, marker_data)
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
      wikidata_items[item.qid] = item;
 | 
					      wikidata_items[item.qid] = item;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if (items[qid] === undefined) items[qid] = {};
 | 
				
			||||||
 | 
					      items[qid].isa_list = item.isa_list;
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    wikidata_loaded = true;
 | 
					    wikidata_loaded = true;
 | 
				
			||||||
| 
						 | 
					@ -324,12 +310,13 @@ function load_wikidata_items() {
 | 
				
			||||||
        Wikidata tag: <a href="${wd_url}" target="_blank">${qid}</a>
 | 
					        Wikidata tag: <a href="${wd_url}" target="_blank">${qid}</a>
 | 
				
			||||||
      </p>`;
 | 
					      </p>`;
 | 
				
			||||||
      marker.bindPopup(popup);
 | 
					      marker.bindPopup(popup);
 | 
				
			||||||
      marker.addTo(group);
 | 
					      var group = add_to_feature_group(qid, marker);
 | 
				
			||||||
 | 
					      group.addTo(map);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if (osm.type != "node" && osm.geojson) {
 | 
					      if (osm.type != "node" && osm.geojson) {
 | 
				
			||||||
        var mapStyle = { fillOpacity: 0 };
 | 
					        var mapStyle = { fillOpacity: 0 };
 | 
				
			||||||
        var geojson = L.geoJSON(null, { style: mapStyle });
 | 
					        var geojson = L.geoJSON(null, { style: mapStyle });
 | 
				
			||||||
        geojson.addTo(map);
 | 
					        add_to_feature_group(qid, geojson);
 | 
				
			||||||
        geojson.addData(osm.geojson);
 | 
					        geojson.addData(osm.geojson);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (items[qid] === undefined) items[qid] = {};
 | 
					        if (items[qid] === undefined) items[qid] = {};
 | 
				
			||||||
| 
						 | 
					@ -366,7 +353,6 @@ document.getElementById("search-form").onsubmit = function (e) {
 | 
				
			||||||
      e.appendChild(a);
 | 
					      e.appendChild(a);
 | 
				
			||||||
      search_results.appendChild(e);
 | 
					      search_results.appendChild(e);
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    console.log(response.data);
 | 
					 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue