Images des zones protégées de WLE 2015

by Édouard Hue

HTML

<link rel="stylesheet" href="//cdn.datatables.net/1.10.9/css/jquery.dataTables.min.css">
<script src="//cdn.datatables.net/1.10.9/js/jquery.dataTables.min.js"></script>
<table id="table" class="display">
    <thead>
    <tr>
        <th>Zone</th>
        <th>Catégorie Commons</th>
        <th>Images</th>
    </tr>
    </thead>
    <tbody id="tablebody">
    </tbody>
</table>

JavaScript

console.clear();

// Query limitation on Commons API
var maxCommonsQueryItems = 50

var $tb = $("#tablebody");
var $table = $("#table").DataTable({
    paging: false,
    columnDefs: [{
        target: 2,
        type: "numeric"
    }]
});

var catLink = function(title) {
    return $("<a>").text(title).attr("href", "https://commons.wikimedia.org/wiki/Category:" + title).wrap("<div/>").parent().html();
}

var itemLink = function(entity) {
    return $("<a>").text(entity.labels.fr.value).attr("href", "https://www.wikidata.org/wiki/" + entity.id).wrap("<div/>").parent().html();
}

var handleAreas = function (areas) {
    var slices = [];

    for (var i = 0; i < areas.items.length; i += maxCommonsQueryItems) {
        slices.push(areas.items.map(function (id) {
            return "Q" + id;
        }).slice(i, i + maxCommonsQueryItems));
    }

    $.each(slices, fetchSliceEntities);
};

// Query Wikidata for entities details
var fetchSliceEntities = function (i, slice) {
    $.getJSON("https://www.wikidata.org/w/api.php?action=wbgetentities&ids=" + slice.join("|") + "&sitefilter=frwiki&languages=fr&props=labels|sitelinks/urls|descriptions|claims&format=json&callback=?", handleSliceEntities);
}

// Handle Wikidata query results
var handleSliceEntities = function (entities) {
    $.each(entities.entities, buildEntityFeature);
};

var buildEntityFeature = function (id, entity) {
    var commonsCat = 'P373' in entity.claims ? entity.claims.P373[0].mainsnak.datavalue.value : null;
    
    var $newRow = $table.row.add([itemLink(entity), catLink(commonsCat), -1 ]);
    $newRow.draw();
    
    $.ajax({
        dataType: "jsonp",
        url: "https://commons.wikimedia.org/w/api.php",
        cache: true,
        data: {
            action: "query",
            list: "categorymembers",
            cmtitle: "Category:" + commonsCat,
            cmtype: "file",
            cmlimit: "max",
            format: "json",
            redirects: ""
        },
        success:...