(function (){ function getIssuesFromDocument(){ var list = { } , issues = document.querySelectorAll(".issue-marker"); if (issues) { issues = Array.prototype.slice.call(issues); issues.forEach(function (issue){ var bugId = issue.dataset.bug_id; if (bugId) { list[bugId] = { "bug_status": issue.dataset.bug_status, "short_desc": issue.querySelector(".short-desc").innerText} ; } } ); } return list; } function setIssueStates(serverIssues, documentIssues){ var serverIssue, documentIssue; if (!serverIssues) { throw new TypeError("Missing 'serverIssues' from server. Expected Object, got " + typeof serverIssues) } if (!documentIssues) { throw new TypeError("Missing 'documentIssues' from document. Expected Object, got " + typeof documentIssues) } for (var bugId in serverIssues){ serverIssue = serverIssues[bugId]; documentIssue = documentIssues[bugId]; if (documentIssues[bugId]) { if ((documentIssue.bug_status !== serverIssue.bug_status) || (documentIssue.short_desc !== serverIssue.short_desc)) { if (!(documentIssue.bug_status == "NEW" && serverIssue.bug_status == "ASSIGNED")) serverIssue.issue_state = "updated"; } } else { if (serverIssue.bug_status === "RESOLVED") { } else { serverIssue.issue_state = "new"; } } } return serverIssues; } function renderIssues(serverIssues){ if (!serverIssues && !_AN_Read_length("length", serverIssues)) { return ; } var documentIssues = getIssuesFromDocument(); var issueList = setIssueStates(serverIssues, documentIssues); var fragment = document.createDocumentFragment(); for (var issueId in issueList){ if (issueList[issueId].issue_state) { var issueFragment = this.renderIssue(issueList[issueId]); var wrapper = _AN_Call_createelement("createElement", document, "div"); var trigger = _AN_Call_createelement("createElement", document, "a"); trigger.className = "issue-markup-trigger"; _AN_Write_href("href", trigger, false , "#"); _AN_Write_innerhtml("innerHTML", trigger, false , "toggle markup"); _AN_Call_setattribute("setAttribute", wrapper, "data-issue_state", issueList[issueId].issue_state); _AN_Call_appendchild("appendChild", wrapper, trigger); _AN_Call_appendchild("appendChild", wrapper, issueFragment); _AN_Call_appendchild("appendChild", fragment, wrapper); } } var issueListContainer = document.querySelector("#issue-list"); _AN_Call_appendchild("appendChild", issueListContainer, fragment); issueListContainer.addEventListener("click", toggleMarkup); } function toggleMarkup(e){ if (_AN_Read_target("target", e).className && _AN_Read_target("target", e).classList.contains("issue-markup-trigger")) { e.preventDefault(); var parent = _AN_Read_target("target", e).parentNode, issueEl = parent.querySelector(".issue-marker"), markup = issueEl.outerHTML; parent.classList.toggle("showMarkup"); if (parent.querySelector("pre")) { return ; } else { var pre = _AN_Call_createelement("createElement", document, "pre"); pre.textContent = markup; _AN_Call_appendchild("appendChild", parent, pre); } } } function filterIssues(e){ if (_AN_Read_target("target", e).name !== "issue-filter") { return ; } var issueManager = document.querySelector("#issue-manager"); switch (_AN_Read_target("target", e).value){ case "all": issueManager.removeAttribute("data-view_state"); break ; case "new": _AN_Call_setattribute("setAttribute", issueManager, "data-view_state", "new"); break ; case "updated": _AN_Call_setattribute("setAttribute", issueManager, "data-view_state", "updated"); break ; } } window.checkSpecificationIssues = function (product, component){ document.addEventListener("DOMContentLoaded", function (){ BugzillaTracker.setIssueTemplate(document.querySelector("#issue-template").innerHTML); BugzillaTracker.sync({ product: product, component: component} , renderIssues); document.querySelector("#issue-manager form").addEventListener("change", filterIssues); } ); } ; } )();