aboutsummaryrefslogblamecommitdiffstats
path: root/data/lib/logging-front.js
blob: 2f69d3ec628366bd562bd4efd70ca6b3f7d7f693 (plain) (tree)
1
2
3
4
5
6
7
8
9
10









                                                       



                                         
                                                                 







                                                        
                                                     
                                                         
     


               



   
                         

                                                    
           
   
 
                                                     

                                                         
                  
 

                                      






                                                            

                                  
 
                                                                     

                                                   
                                                   
                           
 
                                                            


                                                 
 



                                                  
 






                                                                                
 






























































                                                                     

                                     
// Released under the MIT/X11 license
// http://www.opensource.org/licenses/mit-license.php
"use strict";

var EmptyLogsColor = new Color(0, 255, 0);
var FullLogsColor = new Color(0, 40, 103);

var submitHandlerInstalled = false; // for setUpLogging

function addLogRecord() {
  var rec = {};
  rec.date = new Date();
  rec.url = document.location.toString();
  rec.title = document.title;
  var comment = window.prompt("Enter comments for this comment");
  if (comment !== null) {
    comment = comment.trim();
    if (comment.length > 0) {
      comment = comment.trim();
      rec.comment = comment;
      var dateStr = getISODate(rec.date);
      var urlStr = window.location.hostname;
      var bugNo = getBugNoFromURL(window.location.href);
      rec.key = dateStr + "+" + urlStr + "+" + bugNo;
      self.postMessage(new Message("AddLogRecord", rec));
    }
    return rec;
  }
  return null;
}

/**
 */
function setUpLogging() {
  // Protection against double-call
  if (document.getElementById("generateTSButton")) {
    return;
  }

  // For adding additional buttons to the top toolbar
  var additionalButtons = document
      .querySelector("#bugzilla-body *.related_actions");
  var that = this;

  // logging all submits for timesheet
  if (!submitHandlerInstalled) {
    document.forms.namedItem("changeform").addEventListener(
        "submit", function(evt) {
          if (addLogRecord() === null) {
            evt.stopPropagation();
            evt.preventDefault();
          }
        }, false);
    submitHandlerInstalled = true;
  }

  // (id, text, parent, callback, params, before, covered, accesskey)
  createDeadLink("generateTSButton", "Generate TS",
      additionalButtons, function(evt) {
        self.postMessage(new Message("GetTSData"));
      }, [], "dash", "li");

  createDeadLink("clearLogs", "Clear TS", additionalButtons,
      function(evt) {
        self.postMessage(new Message("ClearTS"));
      }, [], "dash", "li");

  createDeadLink("importTSButton", "Import TS",
      additionalButtons, function(evt) {
        self.postMessage(new Message("ImportTS"));
      }, [], "dash", "li");

  /*
   * TODO var clearLogAElem = document.getElementById("clearLogs"); if
   * (this.log.isEmpty()) { clearLogAElem.style.color = this.log.EmptyLogsColor;
   * clearLogAElem.style.fontWeight = "normal"; } else {
   * clearLogAElem.style.color = this.log.FullLogsColor;
   * clearLogAElem.style.fontWeight = "bolder"; }
   */
}


function getBugzillaAbbr(url) {
  // Abbreviations are in constantData.BugzillaAbbreviations
  // for https://bugzilla.redhat.com/show_bug.cgi?id=579123 get RH
  // for https://bugzilla.mozilla.org/show_bug.cgi?id=579123 get MoFo
  return constantData.BugzillaAbbreviations[parseURL(url).host];
}

function timeSheetRecordsPrinter(records, date) {
  var commentBugRE = new RegExp("[bB]ug\\s+([0-9]+)", "g");
  // sort the records into temporary array
  var tmpArr = [];
  var dateStr = getISODate(date);
  var outStr = "data:text/html;charset=utf-8," +
      '<!DOCTYPE html>' + "<html><head>\n" +
      "<meta charset='utf-8'/>\n" + "<title>TimeSheet-" +
      dateStr + "</title>\n</head>\n<body>\n" +
      "<h1>TimeSheet</h1>\n";

  for ( var i in records) {
    if (records.hasOwnProperty(i)) {
      tmpArr.push([
          i, records[i]
      ]);
    }
  }
  tmpArr.sort(function(a, b) {
    if (a[0] > b[0]) {
      return 1;
    }
    else if (a[0] < b[0]) {
      return -1;
    }
    else {
      return 0;
    }
  });

  var currentDay = "";
  // now print the array
  tmpArr.forEach(function(rec) {
    var x = rec[1];
    var dayStr = getISODate(x.date);
    var host = parseURL(x.url).host;
    var BZName = getBugzillaAbbr(x.url);
    var bugNo = getBugNo(x.url);
    if (dayStr != currentDay) {
      currentDay = dayStr;
      outStr += "<hr/><p><strong>" + currentDay
          + "</strong></p>\n";
    }
    // replace "bug ####" with a hyperlink to the current bugzilla
    var comment = x.comment.replace(commentBugRE,
        "<a href='http://" + host
            + "/show_bug.cgi?id=$1'>$&</a>");
    outStr += "<p><em><a href='" + x.url + "'>Bug " + BZName
        + "/" + bugNo + ": " + x.title + "</a>"
        + " </em>\n<br/>" + comment + "</p>\n";
  });
  outStr += "</body></html>";
  self.postMessage(new Message("OpenURLinTab", outStr));
};

//vim: set ts=2 et sw=2 textwidth=80: