| <!-- |
| This in an HTML Import-able file that contains the definition |
| of the following elements: |
| |
| <job-trigger-sk> |
| |
| A ui for selecting job_specs and commits for triggering jobs. |
| |
| To use this file import it: |
| |
| <link href="/res/imp/job-trigger-sk.html" rel="import" /> |
| |
| Usage: |
| |
| <job-trigger-sk></job-trigger-sk> |
| |
| Properties: |
| // input |
| job_specs: Array<String> the names of the available job_specs. |
| commits: Array<String> commit hashes. |
| |
| Methods: |
| None. |
| |
| Events: |
| None. |
| --> |
| |
| <link rel="import" href="/res/imp/bower_components/paper-button/paper-button.html"> |
| <link rel="import" href="/res/imp/bower_components/paper-input/paper-input.html"> |
| <link rel="import" href="/res/imp/bower_components/paper-spinner/paper-spinner.html"> |
| <link rel="import" href="/res/common/imp/autocomplete-input-sk.html"> |
| <link rel="import" href="/res/common/imp/input-list-sk.html"> |
| |
| <dom-module id="job-trigger-sk"> |
| <template> |
| <style> |
| .container { |
| margin: 5px; |
| padding: 10px; |
| border: 1px solid #eeeeee; |
| font-size: 12px; |
| } |
| h2 { |
| font-size: 16px; |
| } |
| </style> |
| <div hidden$="{{_loading}}"> |
| <template is="dom-repeat" items="[[_jobs]]"> |
| <div class="container"> |
| <h2>Job</h2> |
| <autocomplete-input-sk |
| autocomplete="[[job_specs]]" |
| id="job_specs_input" |
| value="{{item.name}}" |
| on-change="_jobs_changed"></autocomplete-input-sk> |
| <h2>Commit</h2> |
| <autocomplete-input-sk |
| autocomplete="[[commits]]" |
| id="commit_input" |
| value="{{item.commit}}" |
| on-change="_jobs_changed"></autocomplete-input-sk> |
| </div> |
| </template> |
| <paper-icon-button icon="add" on-click="_add_job" raised></paper-icon-button> |
| <paper-button on-click="_trigger_jobs" raised>Trigger Jobs</paper-button> |
| <div id="triggered_container" hidden$="{{_hide_triggered_container(_triggered.*)}}" class="container"> |
| <h2>Triggered Jobs</h2> |
| <template is="dom-repeat" items="[[_triggered]]"> |
| <div class="triggered_job"> |
| <a href="/job/{{item}}">{{item}}</a> |
| </div> |
| </template> |
| </div> |
| </div> |
| <paper-spinner active$="{{_loading}}"></paper-spinner> |
| </template> |
| <script> |
| (function(){ |
| Polymer({ |
| is: "job-trigger-sk", |
| |
| properties: { |
| job_specs: { |
| type: Array, |
| }, |
| commits: { |
| type: Array, |
| }, |
| _immediate: { |
| type: Boolean, |
| value: false, |
| }, |
| _loading: { |
| type: Boolean, |
| value: false, |
| }, |
| _jobs: { |
| type: Array, |
| }, |
| _triggered: { |
| type: Array, |
| value: function() { |
| return []; |
| }, |
| }, |
| }, |
| |
| observers: [ |
| "_jobs_changed(_jobs.*)", |
| ], |
| |
| ready: function() { |
| // Parse jobs. |
| var params = sk.query.toParamSet(window.location.search.substring(1)); |
| var jobs = []; |
| if (params["job"] && params["job"].length > 0) { |
| for (var i = 0; i < params["job"].length; i++) { |
| var split = params["job"][i].split("@"); |
| if (split.length != 2) { |
| sk.errorMessage("Invalid job parameter: " + params["job"][i]); |
| continue |
| } |
| jobs.push({"name": split[0], "commit": split[1]}); |
| } |
| } |
| if (jobs.length == 0) { |
| jobs.push({"name": "", "commit": ""}); |
| } |
| this.set("_jobs", jobs); |
| |
| // If "submit=true" is in the URL params, immediately attempt to trigger |
| // the jobs, and, on success, close the window. |
| if (params["submit"] && params["submit"].length > 0 && params["submit"][0] == "true") { |
| this._immediate = true; |
| this._trigger_jobs(); |
| } |
| }, |
| |
| _jobs_changed: function() { |
| var params = sk.query.toParamSet(window.location.search.substring(1)); |
| delete params["job"]; |
| params["job"] = []; |
| for (var i = 0; i < this._jobs.length; i++) { |
| params["job"].push(this._jobs[i].name + "@" + this._jobs[i].commit); |
| } |
| var newUrl = window.location.href.split("?")[0] + "?" + sk.query.fromParamSet(params); |
| window.history.replaceState("", "", newUrl); |
| }, |
| |
| _hide_triggered_container: function() { |
| return !(this._triggered && this._triggered.length > 0); |
| }, |
| |
| _add_job: function() { |
| this.push("_jobs", {"name": "", "commit": ""}); |
| }, |
| |
| _trigger_jobs: function() { |
| var data = []; |
| for (var i = 0; i < this._jobs.length; i++) { |
| var job = this._jobs[i]; |
| if (!job.name) { |
| sk.errorMessage("Job name is required."); |
| return; |
| } |
| if (!job.commit) { |
| sk.errorMessage("Commit is required."); |
| return; |
| } |
| data.push(job); |
| }; |
| var str = JSON.stringify(data); |
| this._loading = true; |
| sk.post("/json/trigger", str).then(function(resp) { |
| this.set("_jobs", [{}]); |
| this.set("_triggered", JSON.parse(resp)); |
| this._loading = false; |
| if (this._immediate) { |
| window.close(); |
| } |
| }.bind(this), function(err) { |
| this._loading = false; |
| sk.errorMessage(err); |
| }.bind(this)); |
| }, |
| }); |
| })(); |
| </script> |
| </dom-module> |