| $(function() { | |
| $("select#organisation").change(function() { | |
| loadPullRequests(); | |
| $("input#filter").val(""); | |
| }); | |
| var completed = false; | |
| var running = false; | |
| var refresh = function() { | |
| $.post('pull-request-import-status.gh', function(data) { | |
| var pullRequests = eval('(' + data + ')'); | |
| var allCompleted = false; | |
| if(pullRequests.length == 0) { | |
| $("#submit").prop("disabled", "disabled"); | |
| } else { | |
| allCompleted = true; | |
| for (var i=0; i<pullRequests.length; i++) { | |
| var id = pullRequests[i].index; | |
| var description = pullRequests[i].value; | |
| var status = pullRequests[i].status.toLowerCase(); | |
| var shortDescription = pullRequests[i].shortDescription; | |
| $("#status_" + id).attr("class", "status " + status); | |
| $("#status_description_" + id).text(shortDescription); | |
| $("#status_description_" + id).attr("title", description); | |
| if(status == 'sync') { | |
| allCompleted = false; | |
| } | |
| } | |
| } | |
| if(allCompleted || repos.length <= 0) { | |
| completed = true; | |
| $("#submit").prop("disabled", ""); | |
| $("#submit").html("<span class=\"button green\"><span>Next ></span></span>") | |
| clearInterval(refreshInterval); | |
| running = false; | |
| } | |
| }); | |
| } | |
| $("#submit").click(function() { | |
| var destination; | |
| if(completed || $("input#checkall:checked").length <= 1) { | |
| $('#pullrequests').submit(); | |
| return true; | |
| } else { | |
| $("tr").each(function() { | |
| var importCheckbox = $(this).find("td input:checkbox"); | |
| if(importCheckbox.prop("checked")) { | |
| var importTypeSelect = $(this).find("#importtype"); | |
| $(importTypeSelect).attr("style","display: none;"); | |
| } | |
| }); | |
| $.ajax({ | |
| type : "POST", | |
| url : "pull-request-import.gh", | |
| data : $("#pullrequests").serialize(), | |
| success : function() { | |
| $(".status").each(function() { | |
| $(this).attr("display","block"); | |
| }); | |
| refresh(); | |
| refreshInterval = setInterval(refresh, 2000); | |
| } | |
| }); | |
| running = true; | |
| $("#submit").prop("disabled", "disabled"); | |
| return false; | |
| } | |
| }); | |
| $("#cancel").click(function() { | |
| if(running) { | |
| $.ajax({ | |
| type : "POST", | |
| url : "pull-request-import-cancel.gh", | |
| success: function() { | |
| refresh(); | |
| } | |
| }); | |
| } else { | |
| window.location = "/"; | |
| } | |
| }); | |
| }); | |
| // Table sort - DataTables | |
| var table = $('#pull-requests'), | |
| tableStyled = false; | |
| table.dataTable({ | |
| 'aoColumnDefs': [ | |
| { 'bSortable': false, 'aTargets': [ 0, 4 ] } | |
| ], | |
| 'oLanguage': { | |
| 'sLengthMenu': '_MENU_ Rows', | |
| 'sSearch':'Search pull request' | |
| }, | |
| 'sPaginationType': 'full_numbers', | |
| 'sDom': '<"dataTables_header"fpl>t', | |
| 'bAutoWidth': true, | |
| 'fnDrawCallback': function( oSettings ) | |
| { | |
| // Only run once | |
| } | |
| }); | |
| $("table thead input#checkall").change(function() { | |
| var checked = $(this).prop("checked"); | |
| $("table tbody td input#checkall").each(function() { | |
| $(this).prop("checked", checked); | |
| }); | |
| }); | |
| $("table thead select#importtype").change(function() { | |
| var importType = $("table thead select#importtype option:selected").val(); | |
| $("table tbody select#importtype option").filter(function() { | |
| return $(this).text() == importType; | |
| }).prop('selected', true); | |
| }); | |
| var loadPullRequests = function (repository) { | |
| $('#pull-requests').attr("style","display: none;"); | |
| $('.dataTables_header').attr("style","display: none;"); | |
| $("div.loading").attr("style","display: visible;"); | |
| if (repository == undefined) { | |
| $("ul.repo-list").empty(); | |
| } | |
| $("table#pull-requests tbody").empty(); | |
| $("#submit").prop("disabled", "disabled"); | |
| var organisation = $("select#organisation option:selected").val(); | |
| $.post('pull-request-list.gh', | |
| { | |
| "organisation": organisation, | |
| "repository": repository | |
| }, | |
| function(data) { | |
| var prs = eval('(' + data + ')'); | |
| var numItems = 0; | |
| table.fnClearTable(); | |
| var idx = 0; | |
| for (var i=0; i<prs.length; i++) { | |
| var pr = prs[i]; | |
| if(repository == undefined) { | |
| repoLi = $("ul.repo-list li#" + pr.repository); | |
| if(repoLi.length == 0) { | |
| $('<li id="' + pr.repository + '"><a href="#">' + pr.repository + '</a>' + | |
| (pr.pullrequests == undefined ? '':'<p>' + pr.pullrequests.length + '</p>') + | |
| '</li>').appendTo('ul.repo-list'); | |
| } | |
| } | |
| if(pr.pullrequests != undefined) { | |
| for(var j=0; j<pr.pullrequests.length; j++) { | |
| var req = pr.pullrequests[j]; | |
| var paramPrefix = "pr." + idx; | |
| table.fnAddData( [ | |
| '<input type="checkbox" name="' + paramPrefix + '.selected" id="checkall" checked="checked">', | |
| '#' + req.id + | |
| '<input type="hidden" name="' + paramPrefix + '.idx" value="' + idx + '"/>' + | |
| '<input type="hidden" name="' + paramPrefix + '.id" value="' + req.id + '"/>' + | |
| '<input type="hidden" name="' + paramPrefix + '.repo" value="' + pr.repository + '"/>', | |
| '<p class="repository">' + pr.repository + '</p> | ' + | |
| '<p class="title">' + req.title + '</p>' + | |
| '<p class="body">' + req.body + '</p>' + | |
| '<p class="author">by ' + req.author + '</p>', | |
| '<p class="timestamp">' + req.date + '</p>', | |
| '<select name="' + paramPrefix + '.type" id="importtype"><option>Commits</option> </select>' + | |
| '<span id="status_' + idx + '" class="status" ></span>' + | |
| '<label id="status_description_' + idx + '" class="synch-status">' | |
| ] ); | |
| idx = idx + 1; | |
| } | |
| numItems = numItems + pr.pullrequests.length; | |
| } | |
| } | |
| if(idx == 0) { | |
| $("#submit").html("<span class=\"button green\"><span>Next ></span></span>") | |
| } | |
| if(repository == undefined) { | |
| var repoSort = function sortAlpha(a,b){ | |
| var cmpA = ($(a).find("p") == undefined ? "0":$(a).find("p").text()) + $(a).find("a").text(); | |
| var cmpB = ($(b).find("p") == undefined ? "0":$(b).find("p").text()) + $(b).find("a").text(); | |
| return cmpA > cmpB ? 1 : -1; | |
| }; | |
| $('ul.repo-list li').sort(repoSort).appendTo('ul.repo-list'); | |
| $('<li class="all selected"><a href="#">All repositories</a><p>' + numItems + "</p></li>").prependTo('ul.repo-list'); | |
| $('ul.repo-list li a').click(function() { | |
| var prevClass = $("ul.repo-list li.selected").attr("class"); | |
| $("ul.repo-list li.selected").attr("class", prevClass == "all selected" ? "all":""); | |
| var currClass = $(this).parent().attr("class"); | |
| $(this).parent().attr("class", currClass + " selected"); | |
| var repository = $(this).text(); | |
| if($(this).parent().attr("class").indexOf("all") < 0) { | |
| loadPullRequests($(this).text()); | |
| } else { | |
| loadPullRequests(); | |
| } | |
| }); | |
| } | |
| $("#submit").prop("disabled", ""); | |
| $(".filter").attr("style","display: visible;"); | |
| $("div.loading").attr("style","display: none;"); | |
| $('#pull-requests').attr("style","display: visible;"); | |
| $('.dataTables_header').attr("style","display: visible;"); | |
| }); | |
| }; | |
| var filterTimeout; | |
| $("input#repo-filter").keyup(function() { | |
| if (filterTimeout) { | |
| clearTimeout(filterTimeout); | |
| } | |
| filterTimeout = setTimeout(function () { | |
| filterRepositories(); | |
| },500); | |
| }); | |
| var filterRepositories = function() { | |
| var filter = $("input#repo-filter").val().toLowerCase(); | |
| var numRepos = 0; | |
| $("ul.repo-list li").each(function() { | |
| var repoName = $(this).find("a").text(); | |
| var matched = repoName.toLowerCase().indexOf(filter)>=0; | |
| if(matched) { | |
| $(this).attr("style","display: visible;"); | |
| } else { | |
| $(this).attr("style","display: none;"); | |
| } | |
| }); | |
| } | |
| $(document).ready(function () { | |
| loadPullRequests(); | |
| }); | |