diff options
Diffstat (limited to 'data/lib/preprocessDuplicates.js')
-rw-r--r-- | data/lib/preprocessDuplicates.js | 168 |
1 files changed, 90 insertions, 78 deletions
diff --git a/data/lib/preprocessDuplicates.js b/data/lib/preprocessDuplicates.js index 44ea5ca..d312fb9 100644 --- a/data/lib/preprocessDuplicates.js +++ b/data/lib/preprocessDuplicates.js @@ -36,85 +36,97 @@ * ***** END LICENSE BLOCK ***** */ function preprocessDuplicateMarkers(mainDoc, histDoc) { - var comments = mainDoc.querySelectorAll(".bz_comment"); - var reDuplicate = /^\s*\*\*\*\s+Bug\s+(\d+)\s+has\s+been\s+marked\s+as\s+a\s+duplicate\s+of\s+this\s+bug.\s+\*\*\*\s*$/i; - var row = 0; - var rows = histDoc.querySelectorAll("#bugzilla-body tr"); - for (var i = 1 /* comment 0 can never be a duplicate marker */; - i < comments.length; ++i) { - var textHolder = comments[i].querySelector(".bz_comment_text"); - var match = reDuplicate.exec(trimContent(textHolder)); - if (match) { - // construct the table row to be injected in histDoc - var bugID = match[1]; - var email = comments[i].querySelector(".bz_comment_user .email") - .href - .substr(7); - var link = textHolder.querySelector("a"); - var title = link.title; - var time = trimContent(comments[i].querySelector(".bz_comment_time")); - var what = 'Duplicate'; - var removed = ''; - var number = trimContent(comments[i].querySelector(".bz_comment_number")). - replace(/[^\d]+/g, ''); - var class_ = ''; - if (/bz_closed/i.test(link.className + " " + link.parentNode.className)) { - class_ += 'bz_closed '; - } - if (link.parentNode.tagName.toLowerCase() == 'i') { - class_ += 'bztw_unconfirmed '; - } - var added = '<a href="show_bug.cgi?id=' + bugID + '" title="' + - htmlEncode(title) + '" name="c' + number + '" class="' + class_ + - '">' + bugID + '</a>'; + var comments = mainDoc.querySelectorAll(".bz_comment"); + var reDuplicate = /^\s*\*\*\*\s+Bug\s+(\d+)\s+has\s+been\s+marked\s+as\s+a\s+duplicate\s+of\s+this\s+bug.\s+\*\*\*\s*$/i; + var row = 0; + var rows = histDoc.querySelectorAll("#bugzilla-body tr"); + for ( var i = 1 /* comment 0 can never be a duplicate marker */; i < comments.length; ++i) { + var textHolder = comments[i] + .querySelector(".bz_comment_text"); + var match = reDuplicate.exec(trimContent(textHolder)); + if (match) { + // construct the table row to be injected in histDoc + var bugID = match[1]; + var email = comments[i] + .querySelector(".bz_comment_user .email").href + .substr(7); + var link = textHolder.querySelector("a"); + var title = link.title; + var time = trimContent(comments[i] + .querySelector(".bz_comment_time")); + var what = 'Duplicate'; + var removed = ''; + var number = trimContent( + comments[i].querySelector(".bz_comment_number")) + .replace(/[^\d]+/g, ''); + var class_ = ''; + if (/bz_closed/i.test(link.className + " " + + link.parentNode.className)) { + class_ += 'bz_closed '; + } + if (link.parentNode.tagName.toLowerCase() == 'i') { + class_ += 'bztw_unconfirmed '; + } + var added = '<a href="show_bug.cgi?id=' + bugID + + '" title="' + htmlEncode(title) + '" name="c' + + number + '" class="' + class_ + '">' + bugID + + '</a>'; - // inject the table row - var reachedEnd = false; - for (; row < rows.length; ++row) { - var cells = rows[row].querySelectorAll("td"); - if (cells.length != 5) - continue; - if (time > trimContent(cells[1])) { - if (row < rows.length - 1) { - continue; - } else { - reachedEnd = true; - } - } - if (time == trimContent(cells[1])) { - cells[0].rowSpan++; - cells[1].rowSpan++; - var rowContents = [what, removed, added]; - var tr = histDoc.createElement("tr"); - rowContents.forEach(function (cellContents) { - var td = histDoc.createElement("td"); - td.innerHTML = cellContents; - tr.appendChild(td); - }); - if (row != rows.length - 1) { - rows[row].parentNode.insertBefore(tr, rows[row+1]); - } else { - rows[row].parentNode.appendChild(tr); - } - } else { - var rowContents = [email, time, what, removed, added]; - var tr = histDoc.createElement("tr"); - rowContents.forEach(function (cellContents) { - var td = histDoc.createElement("td"); - td.innerHTML = cellContents; - tr.appendChild(td); - }); - if (reachedEnd) { - rows[row].parentNode.appendChild(tr); - } else { - rows[row].parentNode.insertBefore(tr, rows[row]); - } - } - break; - } - - // remove the comment from the main doc - comments[i].parentNode.removeChild(comments[i]); + // inject the table row + var reachedEnd = false; + for (; row < rows.length; ++row) { + var cells = rows[row].querySelectorAll("td"); + if (cells.length != 5) + continue; + if (time > trimContent(cells[1])) { + if (row < rows.length - 1) { + continue; + } + else { + reachedEnd = true; + } + } + if (time == trimContent(cells[1])) { + cells[0].rowSpan++; + cells[1].rowSpan++; + var rowContents = [ + what, removed, added + ]; + var tr = histDoc.createElement("tr"); + rowContents.forEach(function(cellContents) { + var td = histDoc.createElement("td"); + td.innerHTML = cellContents; + tr.appendChild(td); + }); + if (row != rows.length - 1) { + rows[row].parentNode.insertBefore(tr, rows[row + 1]); + } + else { + rows[row].parentNode.appendChild(tr); + } } + else { + var rowContents = [ + email, time, what, removed, added + ]; + var tr = histDoc.createElement("tr"); + rowContents.forEach(function(cellContents) { + var td = histDoc.createElement("td"); + td.innerHTML = cellContents; + tr.appendChild(td); + }); + if (reachedEnd) { + rows[row].parentNode.appendChild(tr); + } + else { + rows[row].parentNode.insertBefore(tr, rows[row]); + } + } + break; + } + + // remove the comment from the main doc + comments[i].parentNode.removeChild(comments[i]); } + } } |