server-side/resources/buildServerResources/commandLine.js (157 lines of code) (raw):

BS.CommandLine = { ROWS: [ {css: "fromInput", template: new Template("<input type='text' name='from' value='#{from}'/>" + "<div class='errorDup' style='display:none;'>Non-unique path, ignored</div>")}, {css: "toInput", template: new Template("<input type='text' name='to' value='#{to}'/>")}, {css: "comment", template: new Template("#{comment}")}, {css: "remove", template: new Template("<a title='Remove this mapping' onclick='BS.CommandLine.removeRow(this.parentNode.parentNode); BS.CommandLine.updatePreview(); return false;' href='#' class='actionLink red'>Remove</a>")} ], selectElement: function() { return $('buildConfigurationSelector'); }, fillBuildTypesList: function() { this.removeAllButFirst(); this.addOptionsFromModel(); BS.jQueryDropdown(this.selectElement()); }, removeAllButFirst: function() { var selectElement = this.selectElement(); while (selectElement.length > 1) { selectElement.remove(1); } }, addOptionsFromModel: function() { var selectOptions = [], i; for (i = 0; i < BS.BuildTypes.length; i ++) { var buildType = BS.BuildTypes[i]; if (buildType.id) { var text = buildType.fullName + " [" + buildType.externalId + "]"; selectOptions.push({id: buildType.externalId, text: text}) } } selectOptions.sort(function(a, b) { return a.text.localeCompare(b.text); }); var innerText = ""; for(i = 0; i < selectOptions.length; i ++) { innerText += "<option value='" + selectOptions[i].id + "'>" + selectOptions[i].text + "</option>" } this.selectElement().innerHTML += innerText; }, installControlHandlers: function() { var select = this.selectElement(); select.on("change", function() { $('addMapping').disabled = this.selectedIndex == 0; }); $('addMapping').on("click", function() { var buildTypeId = this.buildTypeId(); if (buildTypeId) { this.addMappingFor(buildTypeId); if ($('btId')) { $('btId').innerHTML = buildTypeId; } } }.bind(this)); }, buildTypeId: function() { var selectElement = this.selectElement(); if (selectElement.selectedIndex > 0) { return selectElement.options[selectElement.selectedIndex].value; } return null; }, addMappingFor: function(buildTypeId) { $('updateIndicator').show(); BS.ajaxRequest("ajax.html?mappingFor=" + buildTypeId, { onSuccess: function(response) { var root = BS.Util.documentRoot(response); if (!root) return; /* "<response>" + " <mapping>" + " <map from=\".\" to=\"perforce://rusps-app01:1666:////depot/src\" comment=\"mock\" />" + " </mapping>" + "</response>")) */ var mapElements = root.getElementsByTagName("map"); if (mapElements.length > 0) { this.showMapping(); for(var i = 0; i < mapElements.length; i ++) { this.addMappingRowFromXml(mapElements[i]); } this.updatePreview(); } }.bind(this), onComplete: function() { $('updateIndicator').hide(); } }); }, showMapping: function() { $('mappingTable').parentNode.style.display = 'block'; }, hideMapping: function() { $('mappingTable').parentNode.style.display = 'none'; }, addMappingRowFromXml: function(rowElement) { this.addMappingRow( rowElement.getAttribute("from"), rowElement.getAttribute("to"), rowElement.getAttribute("comment") ); }, addMappingRow: function(from, to, comment) { var tbody = $('mappingTable').getElementsByTagName('TBODY')[0]; var tr = document.createElement("TR"); this.ROWS.each(function(row) { var td = document.createElement("TD"); td.innerHTML = row.template.evaluate({from: from, to: to, comment: comment}); td.className = row.css; tr.appendChild(td); }); tbody.appendChild(tr); $('mappingTable').select("input").each(function(input_element) { input_element.onblur = BS.CommandLine.updatePreview; input_element.onkeypress = BS.CommandLine.updatePreviewDelayed; }); }, updatePreview: function() { var left2Tr = {}; var results = jQuery('#mappingTable').find('tr'); $('resultsConfig').value = ''; results.each(function() { var trElement = $(this); var inputs = trElement.getElementsByTagName('input'); if (!inputs || inputs.length != 2) return; var fromInput = inputs[0], toInput = inputs[1]; var from = fromInput.value; var to = toInput.value; if (left2Tr[from]) { trElement.down("div.errorDup").show(); var duplicated = $(left2Tr[from].getElementsByTagName('input')[0]); duplicated.addClassName("duplicated"); duplicated.title = "This path is duplicated below"; fromInput.addClassName("duplicate"); } else { left2Tr[from] = trElement; fromInput.removeClassName("duplicated"); fromInput.removeClassName("duplicate"); fromInput.title = ""; trElement.down("div.errorDup").hide(); $('resultsConfig').value += from + "=" + to + "\r\n"; } }); if (results.length == 1) { this.hideMapping(); } }, updatePreviewDelayed: function() { setTimeout(BS.CommandLine.updatePreview, 20); }, removeRow: function(tr_element) { $(tr_element).select("input").each(function(input_element) { input_element.onblur = null; input_element.onkeypress = null; }); $(tr_element).remove(); } }; $j(function() { BS.CommandLine.fillBuildTypesList(); BS.CommandLine.installControlHandlers(); });