mirror of
				https://github.com/peeringdb/peeringdb.git
				synced 2024-05-11 05:55:09 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			147 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			147 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| (function($) {
 | |
| 
 | |
| /**
 | |
|  * peeringdb admin tools
 | |
|  */
 | |
| 
 | |
| PeeringDBAdmin = {
 | |
| 
 | |
|   init : function() {
 | |
|     if($('#org-merge-tool').length > 0)
 | |
|       this.OrgMergeTool.init();
 | |
|   },
 | |
| 
 | |
|   OrgMergeTool : {
 | |
|     tool : function() {
 | |
|       return $('#org-merge-tool')
 | |
|     },
 | |
|     init : function() {
 | |
|       this.tool().find("#org-autocomplete-search-src").yourlabsAutocomplete({
 | |
|         url : "/autocomplete/org",
 | |
|         minimumCharacters : 2,
 | |
|         choiceSelector : "span",
 | |
|         inputClick : function(e,a,b) { console.log(e, a, b); }
 | |
|       }).input.bind("selectChoice", function(a,b) {
 | |
|         console.log("Selected Source Org", b.data("value"));
 | |
|         PeeringDBAdmin.OrgMergeTool.addToSelected(b.data("value"), b.text());
 | |
|         $(this).val("")
 | |
|       });
 | |
| 
 | |
|       this.tool().find("#org-autocomplete-search-trg").yourlabsAutocomplete({
 | |
|         url : "/autocomplete/org",
 | |
|         minimumCharacters : 2,
 | |
|         choiceSelector : "span",
 | |
|         inputClick : function(e,a,b) { console.log(e, a, b); }
 | |
|       }).input.bind("selectChoice", function(a,b) {
 | |
|         console.log("Selected Target Org", b.data("value"));
 | |
|         PeeringDBAdmin.OrgMergeTool.setTargetOrg(b.data("value"), b.text());
 | |
|         $(this).val("")
 | |
|       });
 | |
| 
 | |
|       this.tool().find('#btn-submit').click(function() {
 | |
|         PeeringDBAdmin.OrgMergeTool.submit();
 | |
|       });
 | |
|     },
 | |
| 
 | |
|     // crude server error notification
 | |
|     error : function(response) {
 | |
|       alert("Server responded with error, please check console for further details");
 | |
|       console.error(response);
 | |
|     },
 | |
| 
 | |
|     // reset all selections
 | |
|     reset : function() {
 | |
|       this.tool().find('#listing-selected').empty().siblings(".loading-shim").show();
 | |
|       this.setTargetOrg();
 | |
|     },
 | |
| 
 | |
|     // submit merge request
 | |
|     submit : function() {
 | |
|       var orgs = [];
 | |
|       this.tool().children(".loading-shim").show();
 | |
|       this.tool().find('#listing-selected').find('.row').each(function(){
 | |
|         orgs.push(parseInt($(this).data("id")));
 | |
|       });
 | |
|       $.ajax({
 | |
|         url : "merge",
 | |
|         method : "GET",
 | |
|         data : {
 | |
|           "ids" : orgs.join(","),
 | |
|           "id" : this.targetOrgId
 | |
|         },
 | |
|         success : function(data) {
 | |
|           PeeringDBAdmin.OrgMergeTool.stats(data);
 | |
|           PeeringDBAdmin.OrgMergeTool.reset();
 | |
|           this.tool().children(".loading-shim").hide();
 | |
|         }.bind(this)
 | |
|       }).fail(function(response) {
 | |
|         PeeringDBAdmin.OrgMergeTool.error(response);
 | |
|         this.tool().children(".loading-shim").hide();
 | |
|       }.bind(this));
 | |
|     },
 | |
| 
 | |
|     // render the stats returned by the merge request
 | |
|     stats : function(data) {
 | |
|       var sn = this.tool().find('#stats').empty()
 | |
|       var i;
 | |
|       for(i in data) {
 | |
|         sn.append($('<div>').text(i+': '+data[i]))
 | |
|       }
 | |
|     },
 | |
| 
 | |
|     // remove org from selected org list
 | |
|     removeFromSelected : function(id, name) {
 | |
|       this.tool().find('#listing-selected').find('[data-id="'+id+'"]').detach();
 | |
|     },
 | |
| 
 | |
|     // add org to selected org list
 | |
|     addToSelected : function(id, name) {
 | |
|       var tool = this.tool();
 | |
|       if(this.targetOrgId == id) {
 | |
|         return alert("Merge Target cannot be in selected list")
 | |
|       }
 | |
|       var row = $('<div>')
 | |
|         .addClass('row')
 | |
|         .attr('data-id', id)
 | |
|         .text(name)
 | |
|       row.click(function() { PeeringDBAdmin.OrgMergeTool.removeFromSelected(id, name) });
 | |
|       tool.find('#listing-selected').append(row);
 | |
|       tool.find('#listing').find('[data-id="'+id+'"]').detach();
 | |
|     },
 | |
| 
 | |
|     // set target org
 | |
|     setTargetOrg : function(id, name) {
 | |
|       var tool = this.tool()
 | |
|       if(!id) {
 | |
|         tool.find('#target-org-help').show();
 | |
|         tool.find('#target-org').empty();
 | |
|         tool.find('.finalize').hide();
 | |
|       } else {
 | |
|         tool.find('#target-org-help').hide();
 | |
|         tool.find('#target-org').text(name);
 | |
|         tool.find('.finalize').show();
 | |
|         this.targetOrgId = parseInt(id);
 | |
|         this.removeFromSelected(this.targetOrgId);
 | |
| 
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| twentyc.editable.target.register(
 | |
|   "merge-organization",
 | |
|   {
 | |
|     execute : function(a,b,c) {
 | |
|       console.log(a,b,c);
 | |
|       console.log(this);
 | |
|     }
 | |
|   },
 | |
|   "base"
 | |
| );
 | |
| 
 | |
| $(window).ready(function() {
 | |
|   PeeringDBAdmin.init();
 | |
| });
 | |
| 
 | |
| })(jQuery);
 |