diff --git a/gui/client/Runs/TargetsView.coffee b/gui/client/Runs/TargetsView.coffee index 7d65ef3..97f0616 100644 --- a/gui/client/Runs/TargetsView.coffee +++ b/gui/client/Runs/TargetsView.coffee @@ -114,3 +114,89 @@ class TargetsUI extends CompositeElement t = @targetKnobs?.find("li.current a") t = @targetKnobs?.find("li a:first") unless t?.length > 0 t?.tab("show") + + # DOM objects for creating target + $targetForm = $("#target-create-form") + $createButton = $targetForm.find("#target-create") + $targetName = $targetForm.find("#target-name") + $targetEnvTable = $targetForm.find("#target-env-table") + $targetRemoteUrl = $targetForm.find("#target-remote-url") + $targetSharedPath = $targetForm.find("#target-shared-path") + $targetEnvTableAdd = $targetEnvTable.find("#env-pair-add") # buttons to add rows + + # Initialize tooltips + $targetRemoteUrl.tooltip() + $targetSharedPath.tooltip() + + # Drop-down menu + $targetTypeDropdown = $targetForm.find(".dropdown-menu") + $targetTypeDropdown.click (e) => + do e.preventDefault + do enableButton + # add the form + $targetEnvTable.parent("div").removeClass("hide") + + # addition form elements depending on target type + @newTargetType = $(e.target).text() + $targetTypeDropdown.siblings("button").text(@newTargetType) + switch @newTargetType + when "local" + $targetRemoteUrl.parent("div").addClass("hide") + $targetRemoteUrl.val("") + $targetSharedPath.parent("div").addClass("hide") + $targetSharedPath.val("") + when "ssh" + $targetRemoteUrl.parent("div").removeClass("hide") + $targetSharedPath.parent("div").addClass("hide") + $targetSharedPath.val("") + when "ssh-cluster" + $targetRemoteUrl.parent("div").removeClass("hide") + $targetSharedPath.parent("div").removeClass("hide") + + enableButton = -> + if $targetName.val().length is 0 then $createButton.attr "disabled", "disabled" + else $createButton.removeAttr "disabled" + + $targetName.on "keyup", -> + do enableButton + + # Create target + $createButton.click (e) => + do e.preventDefault + + # get all env values and pairs + env = [] + for pair in $targetForm.find(".env-pair") + envName = $(pair).find(".env-name").find("input").val() + envVal= $(pair).find(".env-value").find("input").val() + env.push envName + "=" + envVal + # get remote url value + url = $targetRemoteUrl.val() + sharedPath = $targetSharedPath.val() + + # Make API call + $.post("#{_3X_.BASE_URL}/api/run/target/#{$targetName.val()}:create",{ + env: env, + type: @newTargetType, + url: url, + sharedPath: sharedPath + }) + $targetForm.modal("hide") + + + # Add row in table + $targetEnvTableAdd.click (e) -> + do e.preventDefault + $targetEnvTable + .find(".env-pair").first() + .clone() + .insertBefore($(@).closest("tr")) + .find("input") + .val("") + + $targetEnvTable + .find(".env-pair-remove").on "click", (e) -> + do e.preventDefault + $rowToRemove = $(@).closest("tr") + $rowToRemove.remove() unless $rowToRemove.is(":first-child") + diff --git a/gui/client/Runs/body.html b/gui/client/Runs/body.html index 7f292b4..2dc82b3 100644 --- a/gui/client/Runs/body.html +++ b/gui/client/Runs/body.html @@ -28,16 +28,15 @@

Queues

Targets

- +
+

Execution History of N/A

@@ -65,6 +64,7 @@

+ + + diff --git a/gui/client/Runs/style.less b/gui/client/Runs/style.less index fa74a6c..877bf82 100644 --- a/gui/client/Runs/style.less +++ b/gui/client/Runs/style.less @@ -122,5 +122,18 @@ div.dataTables_scrollBody table.dataTable { } } } +#target-create-form { + overflow: visible; + .modal-body{ + overflow: visible; + } + .control-label{ + text-align: left; + font-weight: bold; + } + .tooltip-inner{ + max-width: 300px; + } +} // vim:ft=less diff --git a/gui/server.coffee b/gui/server.coffee index ef0127b..32a9cbc 100644 --- a/gui/server.coffee +++ b/gui/server.coffee @@ -549,16 +549,31 @@ app.post /// /api/run/queue/([^:]+):(target) ///, (req, res) -> lazyLines.join -> next (true) ) (respondJSON res) -# Attempt to create queue +# Call to create queue app.post /// /api/run/queue/([^:]+):(create) ///, (req, res) -> [queueName, action] = req.params - #queueName = req.body.name - console.log "jens cli called with name: " + queueName cliEnv(res, { _3X_QUEUE: queueName }, "3x-queue", [queueName] ) (respondJSON res) +# Call to create target +app.post /// /api/run/target/([^:]+):(create) ///, (req, res) -> + [targetName, action] = req.params + envVar = req.body.env + targetType = req.body.type + url = req.body.url # empty string if targetType is local + sharedPath = req.body.sharedPath # empty string if targetType is local or ssh + {stdin} = + cli(res, "xargs", ["3x-target", targetName, "define", targetType, url, sharedPath] + , (lazyLines, next) -> + lazyLines.join -> next (true) + ) (respondJSON res) + + for pair in envVar + stdin.write "#{pair}\n" + stdin.end() + app.post /// /api/run/queue/([^:]+):(duplicate|prioritize|postpone|cancel) ///, (req, res) -> [queueName, action] = req.params # TODO sanitize queueName