Fetch thumbnails from wikidata.
[wolnelektury.git] / src / wolnelektury / static / js / book_text / references.js
1 (function($){$(function(){
2
3     var interestingReferences = $("#interesting-references").text();
4     if (interestingReferences) {
5         interestingReferences = $.parseJSON(interestingReferences);
6     }
7     if (Object.keys(interestingReferences).length) {
8         $("#settings-references").css('display', 'block');
9     }
10
11     var map_enabled = false;
12     var marker = L.circleMarker([0,0]);
13     var map = null;
14
15     function enable_map() {
16         $("#reference-map").show('slow');
17
18         if (map_enabled) return;
19
20         map = L.map('reference-map').setView([0, 0], 11);
21         L.tileLayer('https://tile.thunderforest.com/cycle/{z}/{x}/{y}.png?apikey=a8a97f0ae5134403ac38c1a075b03e15', {
22             attribution: 'Maps © <a href="http://www.thunderforest.com">Thunderforest</a>, Data © <a href="http://www.openstreetmap.org/copyright">OpenStreetMap contributors</a>'
23         }).addTo(map);
24
25         map_enabled = true;
26     }
27     function disable_map() {
28         $("#reference-map").hide('slow');
29     }
30     
31
32     $("#reference-close").on("click", function(event) {
33         event.preventDefault();
34         $("#reference-box").hide();
35     });
36     
37     $('a.reference').each(function() {
38         $this = $(this);
39         uri = $this.attr('data-uri');
40         if (interestingReferences.hasOwnProperty(uri)) {
41             $this.addClass('interesting');
42             ref = interestingReferences[uri];
43
44             $this.attr('href', ref.wikipedia_link);
45             $this.attr('target', '_blank');
46         }
47     });
48
49
50     $('a.reference.interesting').on('click', function(event) {
51         event.preventDefault();
52
53         $("#reference-box").show();
54
55         $this = $(this);
56         uri = $this.attr('data-uri');
57         ref = interestingReferences[uri];
58
59         if (ref.location) {
60             enable_map();
61
62             marker.setLatLng(ref.location);
63             marker.bindTooltip(ref.label).openTooltip();
64             map.addLayer(marker);
65             map.panTo(ref.location, {
66                 animate: true,
67                 duration: 1,
68             });
69         } else {
70             disable_map();
71             if (map) {
72                 map.removeLayer(marker);
73             }
74         }
75
76         $("#reference-images a").remove();
77         if (ref.images) {
78             $.each(ref.images, function(i, e) {
79                 $i = $("<a target='_blank'><img></a>");
80                 $i.attr('href', e.page);
81                 $('img', $i).attr('src', e.thumburl || e.url);
82                 if (e.thumbresolution) {
83                     $('img', $i).attr('width', e.thumbresolution[0]).attr('height', e.thumbresolution[1]);
84                 }
85
86                 $("#reference-images").append($i);
87             })
88         }
89
90         $("#reference-link").text(ref.label);
91         $("#reference-link").attr('href', ref.wikipedia_link);
92     });
93 })})(jQuery);