Viewing File: /usr/local/cpanel/whostmgr/docroot/templates/listips/listips.min.js
(function(){var EVENT=YAHOO.util.Event,DOM=YAHOO.util.Dom,lastNotice=null,DEFAULT_FADE_OUT=5e3,MESSAGE_TYPE_ERROR="error",rowBeingEdited=false,rowBeingDeleted=false,SKIP_TABLE_SORTING_INIT=true,FORCE_TABLE_SORTING_INIT=false;var clearStatus=function(rowId){var statusCell=DOM.get(rowId+"Status");statusCell.className="natStatus"};var showContextNotice=function(messageType,message){var contextNoticeContent=DOM.get("contextNoticeContent");contextNoticeContent.innerHTML=message;if(messageType===MESSAGE_TYPE_ERROR){DOM.addClass("contextNotice","notice-error")}else{DOM.removeClass("contextNotice","notice-error")}DOM.addClass("defaultNotice","notice-hidden");DOM.removeClass("contextNotice","notice-hidden")};var hideContextNotice=function(){DOM.addClass("contextNotice","notice-hidden");DOM.removeClass("contextNotice","notice-error");DOM.removeClass("defaultNotice","notice-hidden")};var calculateIpSortKey=function(ipAddress){if(!CPANEL.validate.ip(ipAddress)){return ipAddress}var ipSegments=ipAddress.split(".");for(var i=0,length=ipSegments.length;i<length;i++){while(ipSegments[i].length<3){ipSegments[i]="0"+ipSegments[i]}}return ipSegments.join("")};var fixTableSorting=function(skipInit){var errorConditions=DOM.getElementsByClassName("dupError","tr","natlist");var headers=DOM.getElementsBy(function(el){return el.tagName.toUpperCase()==="TH"&&!DOM.hasClass(el,"status")},"th","natlist");if(errorConditions.length>0){for(var i=0,length=headers.length;i<length;i++){DOM.removeClass(headers[i],"clickable");DOM.addClass(headers[i],"sorttable_nosort")}}else{for(var ix=0,len=headers.length;ix<len;ix++){DOM.removeClass(headers[ix],"sorttable_nosort")}if(!skipInit){DOM.removeClass(headers,"clickable");sorttable.makeSortable(DOM.get("natlist"))}}};var updatePublicIpSortKey=function(rowId){var publicIpCell=DOM.get(rowId+"PublicIp");var publicIp=publicIpCell.innerHTML.trim();DOM.setAttribute(publicIpCell,"sorttable_customkey",calculateIpSortKey(publicIp));DOM.setAttribute(publicIpCell,"title",LOCALE.maketext("Edit “[_1]”",publicIp));fixTableSorting(FORCE_TABLE_SORTING_INIT)};var checkForDuplicateEntries=function(){var errorMessageRows=DOM.getElementsBy(function(el){return DOM.hasClass(el,"dupError")},"tr","natlist");var errorMessagesToClear=[];var errorRowPublicIp="";var getMatchingPublicIpRows=function(el){var publicIpCell=DOM.get(el.id+"PublicIp");if(publicIpCell&&publicIpCell.innerHTML.trim()===errorRowPublicIp){return true}return false};for(var i=0,length=errorMessageRows.length;i<length;i++){errorRowPublicIp=DOM.getAttribute(errorMessageRows[i],"data-publicip");var matchingPublicIpRows=DOM.getElementsBy(getMatchingPublicIpRows,"tr","natlist");var len=matchingPublicIpRows.length;if(len===1){clearStatus(matchingPublicIpRows[0].id);errorMessagesToClear.push(errorMessageRows[i])}else{for(var ix=0;ix<len;ix++){var currentRow=matchingPublicIpRows[ix];clearStatus(currentRow.id);DOM.addClass(currentRow.id+"Status","natError");if(ix===0){continue}var previousRow=matchingPublicIpRows[ix-1];if(DOM.getNextSibling(previousRow)!==currentRow){var disorderlyRow=currentRow.parentNode.removeChild(currentRow);DOM.insertAfter(disorderlyRow,previousRow)}}if(errorMessageRows[i]!==DOM.getNextSibling(matchingPublicIpRows[ix-1])){var disorderlyErrorRow=errorMessageRows[i].parentNode.removeChild(errorMessageRows[i]);DOM.insertAfter(disorderlyErrorRow,matchingPublicIpRows[ix-1])}restripeNatTable()}}for(i=0,length=errorMessagesToClear.length;i<length;i++){errorMessagesToClear[i].parentNode.removeChild(errorMessagesToClear[i])}fixTableSorting(FORCE_TABLE_SORTING_INIT)};var validateIpSuccess=function(o){var rowId=o.argument.rowId;var publicIpCell=DOM.get(rowId+"PublicIp");var localIp=o.argument.localIp;var checkedIp=o.cpanel_raw.data.checked_ip;if(typeof checkedIp!=="undefined"&&checkedIp!==""){lastNotice=new CPANEL.ajax.Dynamic_Notice({content:LOCALE.maketext("Address successfully validated."),level:"success"});if(publicIpCell.innerHTML.trim()!==checkedIp){publicIpCell.innerHTML=checkedIp}clearStatus(rowId);DOM.addClass(rowId+"Status","natSuccess");setTimeout(function(){clearStatus(rowId);checkForDuplicateEntries()},DEFAULT_FADE_OUT);updatePublicIpSortKey(rowId)}else{lastNotice=new CPANEL.ajax.Dynamic_Notice({content:LOCALE.maketext("“[_1]” cannot be routed.",localIp.html_encode()),level:"warn"});clearStatus(rowId);DOM.addClass(rowId+"Status","natWarning");publicIpCell.innerHTML=LOCALE.maketext("Not Routable")}};var validateIpFailure=function(o){var extractor=/^exit level \[die\]\s+\[pid=\d+\]\s+\((.+)\)\n*$/i;if(o.cpanel_error){var matchResults=o.cpanel_error.match(extractor);var errorString=matchResults[1];lastNotice=new CPANEL.ajax.Dynamic_Notice({content:LOCALE.maketext("Cannot determine public IP address. Unable to connect to myip service."),level:"error",closable:false});showContextNotice(MESSAGE_TYPE_ERROR,LOCALE.maketext("An error has occurred: [_1]",errorString.html_encode()))}else{lastNotice=new CPANEL.ajax.Dynamic_Notice({content:LOCALE.maketext("Public address for “[_1]” is invalid.",o.argument.localIp.html_encode()),level:"error",closable:false})}if(!DOM.hasClass(o.argument.rowId+"Status","natError")){clearStatus(o.argument.rowId);DOM.addClass(o.argument.rowId+"Status","natError");setTimeout(function(){clearStatus(o.argument.rowId)},DEFAULT_FADE_OUT)}};var validateIp=function(mouseEvt,rowData){var localIp=rowData.localIp;var row=rowData.rowId;lastNotice=new CPANEL.ajax.Dynamic_Notice({content:LOCALE.maketext("Validating “[_1]”.",localIp.html_encode()),level:"info"});CPANEL.api({application:"whm",func:"nat_checkip",data:{ip:localIp},callback:{success:validateIpSuccess,failure:validateIpFailure,argument:{rowId:row,localIp:localIp}}})};var dryDockConfirmDeleteForm=function(rowId){var editorDryDock=DOM.get("formDryDock");var actionsCell=DOM.get(rowId+"Actions");var confirmDeleteForm=actionsCell.removeChild(DOM.get("natConfirmDelete"));editorDryDock.appendChild(confirmDeleteForm);EVENT.removeListener("cancelNatEntryDelete","click");EVENT.removeListener("deleteNatEntry","click")};var dryDockEditPublicIpForm=function(rowId){var editorDryDock=DOM.get("formDryDock");var actionsCell=DOM.get(rowId+"Actions");var localIpSaveForm=actionsCell.removeChild(DOM.get("natPublicIpEdit"));editorDryDock.appendChild(localIpSaveForm);EVENT.removeListener("cancelIpEdit","click");EVENT.removeListener("savePublicIp","click")};var restripeNatTable=function(){var tableRows=DOM.getElementsBy(function(el){return!DOM.hasClass(el,"dupError")},"tr","natlist");for(var i=0;i<tableRows.length;i++){if(i%2===0){DOM.addClass(tableRows[i],"evenRow")}else{DOM.removeClass(tableRows[i],"evenRow")}}};var ipDeleteSuccess=function(o){var rowId=o.argument.rowId;lastNotice=new CPANEL.ajax.Dynamic_Notice({content:LOCALE.maketext("Entry for “[_1]” successfully deleted.",o.argument.localIp.html_encode()),level:"success"});DOM.addClass(rowId,"hidden");var row=DOM.get(rowId);row.parentNode.removeChild(row);checkForDuplicateEntries();restripeNatTable();fixTableSorting(FORCE_TABLE_SORTING_INIT)};var ipDeleteFailure=function(o){var msgContent=o.cpanel_messages[0].content;lastNotice=new CPANEL.ajax.Dynamic_Notice({content:LOCALE.maketext("Entry for “[_1]” not deleted.",o.argument.localIp.html_encode()),level:"error"});lastNotice=new CPANEL.ajax.Dynamic_Notice({content:LOCALE.maketext("The reported error message was: “[_1]”",msgContent.html_encode()),level:"error"})};var confirmIpDelete=function(mouseEvt,rowData){var rowId=rowData.rowId;var localIp=rowData.localIp;var etherIF=rowData.etherIF;dryDockConfirmDeleteForm(rowId);showHideNatActionButtons(rowId,true);CPANEL.api({application:"whm",func:"delip",data:{ip:localIp,ethernetdev:etherIF,skipifshutdown:0},callback:{success:ipDeleteSuccess,failure:ipDeleteFailure,argument:{rowId:rowId,localIp:localIp}}});rowBeingDeleted=false};var cancelIpDelete=function(mouseEvt,rowData){var rowId=rowData.rowId;lastNotice=new CPANEL.ajax.Dynamic_Notice({content:LOCALE.maketext("Operation canceled. Entry for “[_1]” not deleted.",arguments[1].localIp.html_encode()),level:"warn"});dryDockConfirmDeleteForm(rowId);showHideNatActionButtons(rowId,true);rowBeingDeleted=false};var deleteIp=function(mouseEvt,rowData){var localIp=rowData.localIp;var rowId=rowData.rowId;var etherIF=rowData.etherIF;if(rowBeingDeleted){lastNotice=new CPANEL.ajax.Dynamic_Notice({content:LOCALE.maketext("You are already attempting to delete an IP address in a different row. Please complete that operation before proceeding."),level:"warn"});return}else{rowBeingDeleted=true}lastNotice=new CPANEL.ajax.Dynamic_Notice({content:LOCALE.maketext("Confirm that entry for “[_1]” should be deleted.",localIp.html_encode()),level:"info"});showHideNatActionButtons(rowId,false);var editorDryDock=DOM.get("formDryDock");var inlineForm=editorDryDock.removeChild(DOM.get("natConfirmDelete"));var actionsCell=DOM.get(rowId+"Actions");actionsCell.appendChild(inlineForm);EVENT.addListener("cancelNatEntryDelete","click",cancelIpDelete,{rowId:rowId,localIp:localIp});EVENT.addListener("deleteNatEntry","click",confirmIpDelete,{rowId:rowId,localIp:localIp,etherIF:etherIF})};var showHideNatActionButtons=function(rowId,show){var rowActionButtons=DOM.get(rowId+"Actions");var buttonList=DOM.getFirstChild(rowActionButtons);if(show){DOM.setStyle(buttonList,"display","block")}else{DOM.setStyle(buttonList,"display","none")}};var cancelPublicIpChange=function(mouseEvt,rowData){var rowId=rowData.rowId;var savedPublicIp=rowData.savedPublicIp;lastNotice=new CPANEL.ajax.Dynamic_Notice({content:LOCALE.maketext("Operation canceled. Public IP change not saved."),level:"warn"});dryDockEditPublicIpForm(rowId);showHideNatActionButtons(rowId,true);var publicIpCell=DOM.get(rowId+"PublicIp");publicIpCell.removeChild(publicIpCell.firstChild);publicIpCell.innerHTML=savedPublicIp;rowBeingEdited=false};var savePublicIpChangeSuccess=function(o){lastNotice=new CPANEL.ajax.Dynamic_Notice({content:LOCALE.maketext("Public IP for “[_1]” successfully changed.",o.argument.localIp.html_encode()),level:"success"});var rowId=o.argument.rowId;clearStatus(rowId);checkForDuplicateEntries();updatePublicIpSortKey(rowId)};var savePublicIpChangeFailure=function(o){lastNotice=new CPANEL.ajax.Dynamic_Notice({content:LOCALE.maketext("Public IP for “[_1]” not changed.",o.argument.localIp.html_encode()),level:"error"})};var savePublicIpChange=function(mouseEvt,rowData){var rowId=rowData.rowId;var localIpCell=DOM.get(rowId+"PublicIp");var editor=DOM.getFirstChild(localIpCell);var newIpValue=editor.value;var savedPublicIp=rowData.savedPublicIp;var localIp=rowData.localIp;localIpCell.removeChild(editor);EVENT.removeListener("cancelIpEdit","click");EVENT.removeListener("saveEditedIp","click");var actionsCell=DOM.get(rowId+"Actions");var doneForm=actionsCell.removeChild(DOM.get("natPublicIpEdit"));var editorDryDock=DOM.get("formDryDock");editorDryDock.appendChild(doneForm);showHideNatActionButtons(rowId,true);if(CPANEL.validate.ip(newIpValue)){var duplicateMappingElement=DOM.getElementBy(function(el){if(DOM.hasClass(el,"pubIp")&&el.innerHTML.trim()===newIpValue){return true}return false},"td","natlist");if(duplicateMappingElement!==null){lastNotice=new CPANEL.ajax.Dynamic_Notice({content:LOCALE.maketext("A mapping with the public address “[_1]” already exists.",newIpValue.html_encode()),level:"error"});lastNotice=new CPANEL.ajax.Dynamic_Notice({content:LOCALE.maketext("Restoring previous value: [_1]",savedPublicIp.html_encode()),level:"info"});localIpCell.innerHTML=savedPublicIp}else{localIpCell.innerHTML=newIpValue;CPANEL.api({application:"whm",func:"nat_set_public_ip",data:{local_ip:localIp,public_ip:newIpValue},callback:{success:savePublicIpChangeSuccess,failure:savePublicIpChangeFailure,argument:{savedPublicIp:savedPublicIp,localIp:localIp,rowId:rowId}}})}}else{lastNotice=new CPANEL.ajax.Dynamic_Notice({content:LOCALE.maketext("“[_1]” is not a valid IP address.",newIpValue.html_encode()),level:"error"});localIpCell.innerHTML=savedPublicIp}rowBeingEdited=false};var editPublicIp=function(mouseEvt,rowData){var rowId=rowData.rowId;var localIp=rowData.localIp;if(rowBeingEdited){lastNotice=new CPANEL.ajax.Dynamic_Notice({content:LOCALE.maketext("You are already editing a public IP address in a different row. Please complete that operation before proceeding."),level:"warn"});return}else{rowBeingEdited=true}lastNotice=new CPANEL.ajax.Dynamic_Notice({content:LOCALE.maketext("Editing public IP for “[_1]”.",localIp.html_encode()),level:"info"});var publicIpCell=DOM.get(rowId+"PublicIp");var publicIpValue=publicIpCell.innerHTML.trim();publicIpCell.innerHTML="";var editor=document.createElement("input");editor.setAttribute("type","text");editor.setAttribute("value",publicIpValue);editor.setAttribute("size","16");editor.setAttribute("maxlength","16");publicIpCell.appendChild(editor);editor.focus();editor.select();showHideNatActionButtons(rowId,false);var editorDryDock=DOM.get("formDryDock");var publicIpSaveForm=editorDryDock.removeChild(DOM.get("natPublicIpEdit"));DOM.get(rowId+"Actions").appendChild(publicIpSaveForm);EVENT.addListener("cancelIpEdit","click",cancelPublicIpChange,{savedPublicIp:publicIpValue,rowId:rowId});EVENT.addListener("saveEditedIp","click",savePublicIpChange,{localIp:localIp,savedPublicIp:publicIpValue,rowId:rowId})};var addButtonListeners=function(){var tableRows=DOM.getElementsBy(function(el){return el.tagName==="TR"&&DOM.getFirstChild(el).tagName!=="TH"&&!DOM.hasClass(el,"dupError")},"tr","natlist");var findValidateButton=function(el){return DOM.hasClass(el,"validateMappingBtn")};var findEditButton=function(el){return DOM.hasClass(el,"editMappingBtn")};var findDeleteButton=function(el){return DOM.hasClass(el,"deleteMappingBtn")};for(var i=0,length=tableRows.length;i<length;i++){var rowId=tableRows[i].id;var localIp=DOM.get(rowId+"LocalIp").innerHTML.trim();var etherIF=DOM.get(rowId+"If").innerHTML.trim();var validateBtn=DOM.getElementBy(findValidateButton,"a",tableRows[i]);if(validateBtn){EVENT.addListener(validateBtn,"click",validateIp,{rowId:rowId,localIp:localIp})}var editBtn=DOM.getElementBy(findEditButton,"a",tableRows[i]);if(editBtn){EVENT.addListener(editBtn,"click",editPublicIp,{rowId:rowId,localIp:localIp})}var deleteBtn=DOM.getElementBy(findDeleteButton,"a",tableRows[i]);if(deleteBtn){EVENT.addListener(deleteBtn,"click",deleteIp,{rowId:rowId,localIp:localIp,etherIF:etherIF})}}};var initialize=function(){EVENT.addListener("contextNoticeClose","click",hideContextNotice);var tableDimensions=DOM.getRegion("natlist");DOM.setStyle("ipnotices","width",tableDimensions.width+"px");EVENT.addListener("tableHeader","click",restripeNatTable);fixTableSorting(SKIP_TABLE_SORTING_INIT);addButtonListeners()};EVENT.onDOMReady(initialize)})();
Back to Directory
File Manager