Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
  <div id="boutons">
    <h4>Milestones ouvertes</h4>
    <ul id="ouvertes">
    </ul>
    <h4>Milestones fermées</h4>
    <ul id="fermees">
    </ul>
  </div>
  <hr>
  <div>
    <textarea id="md" readonly>
      Ici sera inscrit la liste des tickets
    </textarea>
  </div>
</body>
</html>
 
// Créé les boutons lorsque le DOM est chargé
document.addEventListener('DOMContentLoaded', init, false);
var ouvertes;
var fermees;
var divMD;
function init() {
  ouvertes = document.getElementById('ouvertes');
  fermees = document.getElementById('fermees');
  divMD = document.getElementById('md');
  // requete GitHub pour avoir les milestones
  getMilestones();
}
function getMilestones(page) {
  // Fonction qui va créer l'url avec les paramètres puis
  // envoyer la requête
  var requete = new XMLHttpRequest(); // créer un objet de requête
  var url = "https://api.github.com/repos/zestedesavoir/zds-site/" +
            "milestones?state=all&per_page=100";
  if(page) {
    console.log("ajoute num page " + page);
    url += "&page=" + page;
  }
  console.log("url : " + url);
  requete.open('GET', url, true); // On construit la requête
  requete.send(null); // On envoie !
  requete.onreadystatechange = function() { // on attend le retour
    if (requete.readyState == 4) { // Revenu !
      if (requete.status == 200) {// Retour s'est bien passé !
        // peuplage des champs
        var donnees = JSON.parse(requete.responseText);
        var headers = requete.getAllResponseHeaders().toLowerCase();
        //console.log(donnees);
        //console.log(headers);
        for(i=0; i<donnees.length; i++) {
          var puce = document.createElement("li");
          var lien = document.createElement("a");
          lien.innerText = donnees[i].title;
          lien.href = "#";//donnees[i].url;
          lien.title = donnees[i].description;
          lien.addEventListener("click",
                                getTickets.bind(null, donnees[i], ""),
                                false);
          puce.appendChild(lien);
          if(donnees[i].state === "open")
            ouvertes.appendChild(puce);
          else
            fermees.appendChild(puce);
        }
      } else { // Retour s'est mal passé :(
        console.log(requete.statusText);
      }
    }
  };
}
function readHeaders(headers) {
  // retourne l'indice de la prochaine page
  var nextPageNumber = 0;
  return nextPageNumber;
}
function getTickets(milestone, page) {
  // Fonction qui va créer l'url avec les paramètres puis
  // envoyer la requête
  var requete = new XMLHttpRequest(); // créer un objet de requête
  var url = "https://api.github.com/repos/zestedesavoir/zds-site/" +
            "issues?milestone=" + milestone.number + 
            "&state=all&per_page=100";
  if(page) {
    console.log("ajoute num page " + page);
    url += "&page=" + page;
  }
  console.log("url : " + url);
  requete.open('GET', url, true); // On construit la requête
  requete.send(null); // On envoie !
  requete.onreadystatechange = function() { // on attend le retour
    if (requete.readyState == 4) { // Revenu !
      if (requete.status == 200) {// Retour s'est bien passé !
        // peuplage des champs
        var donnees = JSON.parse(requete.responseText);
        var headers = requete.getAllResponseHeaders().toLowerCase();
        console.log(donnees);
        console.log(headers);
        var openTickets = [];
        var closedBugs = [];
        var closedEvos = [];
        var closedUnks = [];
        for(i=0; i<donnees.length; i++) {
          if(donnees[i].state === "open") {
            openTickets.push(donnees[i]);
          } else {
            closedUnks.push(donnees[i]);
            for(j=0; j<donnees[i].labels.length; j++) {
              if(donnees[i].labels[j].name.toLowerCase() === "evolution") {
                closedEvos.push(donnees[i]);
                closedUnks.pop();
              } else if(donnees[i].labels[j].name.toLowerCase() === "bug") {
                closedBugs.push(donnees[i]);
                closedUnks.pop();
              }
            }
          }
        }
        console.log(openTickets);
        console.log(closedBugs);
        console.log(closedEvos);
        console.log(closedUnks);
        // fait l'affichage
        var contenu = "";
        contenu += "Rapport pour le jalon **[" + milestone.title + "]" +
                   "(https://github.com/zestedesavoir/zds-site/milestones/" + 
                   milestone.title + ")** " +
                   "*(" + milestone.description + ")*\n\n";
        contenu += "" + (openTickets.length+closedBugs.length+closedEvos.length+closedUnks.length) +
                   " tickets sont compris dans ce jalon " +
                   "(" + openTickets.length + " ouverts et " +
                   "" + (closedBugs.length+closedEvos.length+closedUnks.length) + " fermés)\n\n";
        contenu += "# Tickets toujours ouvert\n\n";
        contenu += mdarray(openTickets);
        contenu += "# Tickets fermé\n\n";
        contenu += "## Corrections de bug\n\n";
        contenu += mdarray(closedBugs);
        contenu += "## Evolutions\n\n";
        contenu += mdarray(closedEvos);
        contenu += "## Non défini\n\n";
        contenu += mdarray(closedUnks);
        md.innerHTML = contenu;
        md.rows = openTickets.length+closedBugs.length+closedEvos.length+closedUnks.length + 30;
      } else { // Retour s'est mal passé :(
        console.log(requete.statusText);
      }
    }
  };
}
function mdarray(tickets) {
  if(tickets.length === 0)
    return "Aucun ticket\n\n";
  var content = "";
  content += "Ticket # | Titre | Label(s)\n";
  content += "---------|-------|---------\n";
  for(i=0; i<tickets.length; i++) {
    var labels = "";
    for(j=0; j<tickets[i].labels.length; j++) {
      labels += tickets[i].labels[j].name + ', ';
    }
    content += "[#"+tickets[i].number+"]("+tickets[i].html_url+") | "+tickets[i].title+" | "+labels+"\n";
  }
  content += "\n";
  return content;
}
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
anonymouspro
0viewers