mirror of
				https://github.com/mmumshad/ansible-playable.git
				synced 2025-03-09 23:38:54 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			282 lines
		
	
	
	
		
			8.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			282 lines
		
	
	
	
		
			8.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| const angular = require('angular');
 | |
| 
 | |
| const uiRouter = require('angular-ui-router');
 | |
| 
 | |
| import routes from './custom_modules.routes';
 | |
| 
 | |
| export class CustomModulesComponent {
 | |
|   /*@ngInject*/
 | |
|   constructor($scope,customModules,$sce,ansi2html,Projects,$uibModal,YAML) {
 | |
|     'ngInject';
 | |
| 
 | |
|     var customModulesCtrl = this;
 | |
| 
 | |
|     customModulesCtrl.custom_modules = [];
 | |
|     customModulesCtrl.selectedModule = {module:{},module_code:"",module_unchanged_code:""};
 | |
|     customModulesCtrl.selected_module_code = "something";
 | |
| 
 | |
|     customModulesCtrl.showNewModuleForm = {value:false};
 | |
| 
 | |
|     /**
 | |
|      * Get List of Projects
 | |
|      */
 | |
|     customModulesCtrl.getProjects = function(){
 | |
|       customModulesCtrl.projects = Projects.resource.query(function(){
 | |
|         if(customModulesCtrl.projects.length){
 | |
|           customModulesCtrl.selectedProjectID = localStorage.selectedProjectID || customModulesCtrl.projects[0]._id;
 | |
|           customModulesCtrl.projectSelected(customModulesCtrl.selectedProjectID)
 | |
|         }
 | |
| 
 | |
|       })
 | |
|     };
 | |
| 
 | |
|     /**
 | |
|      * On project selection
 | |
|      *  - List all custom modules in that project
 | |
|      * @param projectID
 | |
|      */
 | |
|     customModulesCtrl.projectSelected = function(projectID){
 | |
| 
 | |
|       localStorage.selectedProjectID = projectID;
 | |
| 
 | |
|       customModulesCtrl.selectedProject = Projects.resource.get({id: projectID},function(){
 | |
|         Projects.selectedProject = customModulesCtrl.selectedProject;
 | |
|         customModulesCtrl.getCustomModules();
 | |
|       })
 | |
|     };
 | |
| 
 | |
| 
 | |
|     /**
 | |
|      * Get a list of Custom modules in the selected project
 | |
|      */
 | |
|     customModulesCtrl.getCustomModules = function(){
 | |
|       customModules.get(function(response){
 | |
|         var lines = response.data.split("\n");
 | |
|         if(lines.length)
 | |
|           lines = lines
 | |
|             .filter(function(line){return line.indexOf(".py") > -1})
 | |
|             .map(function(item){return {name:item}});
 | |
|         customModulesCtrl.custom_modules = lines;
 | |
| 
 | |
|         if(customModulesCtrl.selectedModule.module.name){
 | |
|           customModulesCtrl.selectedModule.module = customModulesCtrl.custom_modules.filter(function(item){
 | |
|             return (item.name == customModulesCtrl.selectedModule.module.name)
 | |
|           })[0]
 | |
|         }
 | |
| 
 | |
| 
 | |
|       });
 | |
|     };
 | |
| 
 | |
| 
 | |
| 
 | |
|     /**
 | |
|      * Show Module Code. Read the module file contents and display in UI
 | |
|      * @param module_name
 | |
|      */
 | |
|     customModulesCtrl.loadingModuleCode = false;
 | |
| 
 | |
|     customModulesCtrl.showModuleCode = function(module_name){
 | |
|       customModulesCtrl.loadingModuleCode = true;
 | |
|       if(!module_name){
 | |
|         customModulesCtrl.selectedModule.module_code = "Select a module";
 | |
|         return;
 | |
|       }
 | |
|       customModules.show(module_name,function(response) {
 | |
|         customModulesCtrl.loadingModuleCode = false;
 | |
|         customModulesCtrl.selectedModule.module_code = response.data.split("Stream :: close")[0];
 | |
|         customModulesCtrl.selectedModule.module_unchanged_code = angular.copy(customModulesCtrl.selectedModule.module_code);
 | |
|       });
 | |
|     };
 | |
| 
 | |
| 
 | |
|     /**
 | |
|      * On selected module change display code in UI
 | |
|      */
 | |
|     $scope.$watch('customModulesCtrl.selectedModule.module',function(newValue,oldValue){
 | |
|       if(newValue.name && newValue.name !== oldValue.name){
 | |
|         customModulesCtrl.selectedModule.module_code = "Loading Module Code...";
 | |
|         customModulesCtrl.showModuleCode(newValue.name)
 | |
|       }
 | |
|     });
 | |
| 
 | |
| 
 | |
|     /**
 | |
|      * On Code Change
 | |
|      *
 | |
|      */
 | |
|     customModulesCtrl.code_has_changed = false;
 | |
| 
 | |
|     customModulesCtrl.codeChanged = function(){
 | |
|       if(customModulesCtrl.selectedModule.module_unchanged_code !== customModulesCtrl.selectedModule.module_code){
 | |
|         customModulesCtrl.code_has_changed = true
 | |
|       }else{
 | |
|         customModulesCtrl.code_has_changed = false
 | |
|       }
 | |
|     };
 | |
| 
 | |
|     /**
 | |
|      * Discard code changes
 | |
|      */
 | |
|     customModulesCtrl.discardCodeChanges = function(){
 | |
|       customModulesCtrl.selectedModule.module_code = angular.copy(customModulesCtrl.selectedModule.module_unchanged_code);
 | |
|     };
 | |
| 
 | |
|     /**
 | |
|      * Save Module
 | |
|      */
 | |
|     customModulesCtrl.saveModule = function(){
 | |
|       customModulesCtrl.saving = true;
 | |
|       customModules.save(customModulesCtrl.selectedModule.module.name,customModulesCtrl.selectedModule.module_code,function(response){
 | |
|         customModulesCtrl.saving = false;
 | |
|         customModulesCtrl.code_has_changed = false;
 | |
|         customModulesCtrl.selectedModule.module_unchanged_code = angular.copy(customModulesCtrl.selectedModule.module_code);
 | |
| 
 | |
|       },function(response){
 | |
|         customModulesCtrl.saving = false;
 | |
|         console.error(response.data)
 | |
|       })
 | |
|     };
 | |
| 
 | |
| 
 | |
|     /**
 | |
|      * Test Module
 | |
|      */
 | |
|     customModulesCtrl.testModule = function(){
 | |
| 
 | |
|       var re = /([^]+DOCUMENTATION = '''\s+)([^]+?)(\s+'''[^]+)/;
 | |
|       var module_string = customModulesCtrl.selectedModule.module_code.replace(re,'$2');
 | |
| 
 | |
|       customModulesCtrl.selectedModuleObject = YAML.parse(module_string);
 | |
| 
 | |
|       //var options_copy = angular.copy(customModulesCtrl.selectedModuleObject.options);
 | |
|       var options_copy = {};
 | |
|       /*options_copy = options_copy.map(function(item){
 | |
|        var temp_obj = {};
 | |
|        temp_obj[item.name] = "";
 | |
|        return temp_obj
 | |
|        });*/
 | |
| 
 | |
|       var module_name = customModulesCtrl.selectedModule.module.name;
 | |
|       var module_cached_args = null;
 | |
| 
 | |
|       try{
 | |
|         module_cached_args = JSON.parse(localStorage['test_args_'+module_name]);
 | |
|       }catch (e){
 | |
|         console.log("Error getting cached arguments.");
 | |
|         module_cached_args = null;
 | |
|       }
 | |
| 
 | |
|       angular.forEach(customModulesCtrl.selectedModuleObject.options,function(value,key){
 | |
|         //var temp_obj = {};
 | |
|         //temp_obj[key] = "";
 | |
|         options_copy[key] = "";
 | |
| 
 | |
|         if(module_cached_args && key in module_cached_args){
 | |
|           options_copy[key] = module_cached_args[key];
 | |
|         }
 | |
| 
 | |
|       });
 | |
| 
 | |
| 
 | |
|       var variable = {name:'',complexValue:options_copy};
 | |
|       customModulesCtrl.showComplexVariable(variable);
 | |
| 
 | |
|     };
 | |
| 
 | |
|     /**
 | |
|      * New Module - On pressing New Module button
 | |
|      */
 | |
|     customModulesCtrl.newModule = function(){
 | |
|       customModulesCtrl.showNewModuleForm.value = true;
 | |
|       $scope.$broadcast ('newModule');
 | |
|     };
 | |
| 
 | |
|     /**
 | |
|      * Edit Module - On pressing Edit Module button
 | |
|      */
 | |
|     customModulesCtrl.editModule = function(){
 | |
|       customModulesCtrl.showNewModuleForm.value = true;
 | |
|       $scope.$broadcast ('editModule');
 | |
|     };
 | |
| 
 | |
| 
 | |
|     /**
 | |
|      * Show Complex Variable modal for getting input parameters for testing module
 | |
|      * @param variable
 | |
|      */
 | |
|     customModulesCtrl.showComplexVariable = function(variable){
 | |
|       customModulesCtrl.result = "";
 | |
|       var modalInstance = $uibModal.open({
 | |
|         animation: true,
 | |
|         template: require('../../app/modals/complex_var_modal/complexVariable.html'),
 | |
|         controller: 'ComplexVarModalController',
 | |
|         size: 'sm',
 | |
|         backdrop: 'static',
 | |
|         keyboard: false,
 | |
|         closeByEscape: false,
 | |
|         closeByDocument: false,
 | |
|         resolve: {
 | |
|           path: function () {
 | |
|             return variable.name
 | |
|           },
 | |
|           hostvars: function(){
 | |
|             return null
 | |
|           },
 | |
|           members: function(){
 | |
|             return variable.complexValue
 | |
|           }
 | |
|         }
 | |
|       });
 | |
| 
 | |
|       modalInstance.result.then(function (module_args) {
 | |
| 
 | |
|         var module_name = customModulesCtrl.selectedModule.module.name;
 | |
| 
 | |
|         /*var args = "";
 | |
|          angular.forEach(selectedItem,function(value,key){
 | |
| 
 | |
|          if(value){
 | |
|          args += " " + key + "=" + value
 | |
|          }
 | |
| 
 | |
|          });
 | |
| 
 | |
|          if(args){
 | |
|          module_name += " -a " + args
 | |
|          }*/
 | |
| 
 | |
|         localStorage['test_args_'+module_name] = JSON.stringify(module_args);
 | |
| 
 | |
|         customModulesCtrl.testing = true;
 | |
| 
 | |
|         customModules.test(module_name,module_args,function(response) {
 | |
|             customModulesCtrl.testing = false;
 | |
|             customModulesCtrl.result = $sce.trustAsHtml(ansi2html.toHtml(response.data.split("Stream :: close")[0]).replace(/\n/g, "<br>"));
 | |
|           },
 | |
|           function(response) {
 | |
|             customModulesCtrl.testing = false;
 | |
|             customModulesCtrl.result = $sce.trustAsHtml(ansi2html.toHtml(response.data.split("Stream :: close")[0]).replace(/\n/g, "<br>"));
 | |
|           });
 | |
| 
 | |
|       }, function () {
 | |
| 
 | |
|       });
 | |
| 
 | |
|     };
 | |
| 
 | |
|     // List projects
 | |
|     customModulesCtrl.getProjects();
 | |
| 
 | |
|   }
 | |
| }
 | |
| 
 | |
| export default angular.module('webAppApp.custom_modules', [uiRouter])
 | |
|   .config(routes)
 | |
|   .component('customModules', {
 | |
|     template: require('./custom_modules.html'),
 | |
|     controller: CustomModulesComponent,
 | |
|     controllerAs: 'customModulesCtrl'
 | |
|   })
 | |
|   .name;
 |