From b108b457a6b207b38fda51c90e0a869ba97e8794 Mon Sep 17 00:00:00 2001 From: Alexander Karaulshchikov Date: Mon, 9 Dec 2019 22:27:31 +0100 Subject: [PATCH] Now the user can choose the executor for the program --- app.js | 10 ++++++---- package.json | 2 +- resources/index.pug | 7 +++++++ resources/js/script.js | 41 +++++++++++++++++++++++++++++++++++++++-- 4 files changed, 53 insertions(+), 7 deletions(-) diff --git a/app.js b/app.js index 620e771..db19b6e 100644 --- a/app.js +++ b/app.js @@ -132,10 +132,12 @@ function getExcecutorURL(data) { for(var j in solvers) { // FIXME: The client should pass 'solver' parameter and not 'engine' if(solvers[j].value === data.engine) { - // TODO let the user choose the executor. atm this is a missing data - // by default the first executor will be chosen - var executor = solvers[j].executors[0]; - return executor.protocol + '://' + executor.url + ':' + executor.port + executor.path; + var executors = solvers[j].executors; + for(var k in executors) { + if(executors[k].value === data.executor) { + return executors[k].protocol + '://' + executors[k].url + ':' + executors[k].port + executors[k].path; + } + } } } } diff --git a/package.json b/package.json index 88d857a..1be7f10 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "LoIDE", - "version": "2.1.0", + "version": "2.2.0", "description": "Web-based IDE for Logic Programming", "main": "app.js", "scripts": { diff --git a/resources/index.pug b/resources/index.pug index 0731351..49d469c 100644 --- a/resources/index.pug +++ b/resources/index.pug @@ -125,6 +125,9 @@ + +
@@ -340,6 +343,10 @@ div(name="solvers" value=language.value) each solver in language.solvers option(value=solver.value) #{solver.name} + //- Sets the executors + div(name="executors" value=solver.value) + each executor in solver.executors + option(value=executor.value) #{executor.name} //- Sets the options div(name="options" value=solver.value) each option in solver.options diff --git a/resources/js/script.js b/resources/js/script.js index f107663..f199126 100644 --- a/resources/js/script.js +++ b/resources/js/script.js @@ -653,6 +653,7 @@ $(document).on('change', '#inputLanguage', function(event) { // Sets the options on solver change $(document).on('change', '#inputengine', function (event) { loadSolverOptions( ); + loadSolverExecutors( ); // Snippets inizializeSnippets( ); @@ -705,6 +706,38 @@ function getLanguageSolvers( language ) { return $('#servicesContainer [name="solvers"][value="' + language + '"] > option').clone( ); } +/** + * @description - Load the executors for a specific solver + */ +function loadSolverExecutors( ) { + var inputLanguage = $('#inputLanguage'); + var inputSolver = $('#inputengine'); + var inputExecutor = $('#inputExecutor'); + + var language = inputLanguage.val(); + var solver = inputSolver.val(); + + // Check that the value is not empty + if(language !== '' && solver !== '') { + inputExecutor.empty(); + + // Append the executors to the DOM + inputExecutor.append( getSolverExecutors( language, solver ) ); + + // Select the first executor + inputExecutor.change(); + } +} + +/** + * @description - Get the executors for a specific solver + * @param {Object} language + * @param {Object} solver + */ +function getSolverExecutors( language, solver ) { + return $('#servicesContainer [name="solvers"][value="' + language + '"] [name="executors"][value="' + solver + '"] > option').clone( ); +} + /** * @description - Load the options for a specific solver */ @@ -734,7 +767,7 @@ function loadSolverOptions( ) { */ function getSolverOptions( language, solver ) { return $('#servicesContainer [name="solvers"][value="' + language + '"] [name="options"][value="' + solver + '"] > option').clone( ); - } +} // Add or remove the 'input type value' based on the option $(document).on('change', '.form-control-option', function () { @@ -970,7 +1003,8 @@ function addInputValue(inputClass) { * @description check if the configration file has the correct property to set. If not, return false and display the content of the file in the text editor */ function setJSONInput(config) { - if (config.hasOwnProperty('language') || config.hasOwnProperty('engine') || config.hasOwnProperty('option') || config.hasOwnProperty('program') || config.hasOwnProperty('output') || config.hasOwnProperty('tabname')) { + if (config.hasOwnProperty('language') || config.hasOwnProperty('engine') || config.hasOwnProperty('executor') || config.hasOwnProperty('option') + || config.hasOwnProperty('program') || config.hasOwnProperty('output') || config.hasOwnProperty('tabname')) { $('.nav-tabs li:not(:last)').each(function (index, element) { var id = $(this).find("a").attr("data-target"); $(this).remove(); @@ -992,6 +1026,7 @@ function setJSONInput(config) { } $('#inputLanguage').val(config.language).change(); $('#inputengine').val(config.engine).change(); + $('#inputExecutor').val(config.executor).change(); $('#output').text(config.output); setOptions(config); setTabsName(config); @@ -1312,6 +1347,7 @@ function saveOption(key, value) { /** * @description Sets the saved options in the localStorage + * TODO: Restore executor */ function restoreOptions() { if (!supportLocalStorage) { @@ -2199,6 +2235,7 @@ function loadProjectFromLocalStorage() { var obj = JSON.parse(opt); $('#inputLanguage').val(obj.language).change(); $('#inputengine').val(obj.engine).change(); + $('#inputExecutor').val(obj.executor).change(); if(obj.option != null) { setOptions(obj); }