diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..0414d8e --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,29 @@ +module.exports = { + "env": { + "browser": true, + "jquery": true + }, + "extends": "eslint:recommended", + "parserOptions": { + "ecmaVersion": 6 + }, + "rules": { + "indent": [ + "error", + 4 + ], + "linebreak-style": [ + "error", + "unix" + ], + "no-console": "off", + "quotes": [ + "error", + "double" + ], + "semi": [ + "error", + "always" + ] + } +}; diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 49d7703..ea19d4c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,7 @@ --- repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v1.3.0 + rev: v1.4.0-1 hooks: - id: trailing-whitespace - id: end-of-file-fixer @@ -11,13 +11,14 @@ repos: - id: check-merge-conflict - id: check-symlinks - id: check-vcs-permalinks + - id: check-json - id: flake8 - id: debug-statements - id: requirements-txt-fixer - id: check-yaml files: .*\.(yaml|yml)$ - repo: https://github.com/adrienverge/yamllint.git - rev: v1.11.1 + rev: v1.12.0 hooks: - id: yamllint files: \.(yaml|yml)$ @@ -26,3 +27,8 @@ repos: rev: 0.6.0 hooks: - id: bashate + - repo: https://github.com/pre-commit/mirrors-eslint + rev: v5.6.1 # Use the sha / tag you want to point at + hooks: + - id: eslint + entry: "eslint --format unix" diff --git a/coats/openstack_gerrit_zuul_status.user.js b/coats/openstack_gerrit_zuul_status.user.js index 4d3b27e..455c2ac 100644 --- a/coats/openstack_gerrit_zuul_status.user.js +++ b/coats/openstack_gerrit_zuul_status.user.js @@ -31,44 +31,47 @@ const zuul_status_url = zuul_status_base + "api/status/change/"; // Script start -$('style#gerrit_sitecss').append('.result_RUNNING { color: #1e9ced; }'); +/* defined by hideci.js */ +/* global ci_latest_patchset, ci_parse_comments */ + +$("style#gerrit_sitecss").append(".result_RUNNING { color: #1e9ced; }"); var render = function(jobs) { - var location = $('table.test_result_table'); + var location = $("table.test_result_table"); - var table = '' + - '' + - 'Zuul check' + - 'Still running' + - ''; + var table = "" + + "" + + "Zuul check" + + "Still running" + + ""; - $.each(jobs, function(i, job) { - var status_with_completeness = ((job.status === 'running' && typeof job.completeness !== 'undefined') ? 'RUNNING (' + job.completeness + ')' : job.status.toUpperCase()); - var voting = job.voting === true ? '' : ' (non-voting)'; + $.each(jobs, function(i, job) { + var status_with_completeness = ((job.status === "running" && typeof job.completeness !== "undefined") ? "RUNNING (" + job.completeness + ")" : job.status.toUpperCase()); + var voting = job.voting === true ? "" : " (non-voting)"; - table += '' + - '' + job.name + '' + voting + '' + - '' + status_with_completeness + '' + - ''; - }); + table += "" + + "" + job.name + "" + voting + "" + + "" + status_with_completeness + "" + + ""; + }); - table += ''; + table += ""; - location.html(table); + location.html(table); }; var main = function() { - const url = $(location).attr('href'); + const url = $(location).attr("href"); const matches_url = /^https?:\/\/review\.openstack\.org\/(#\/c\/)?(\d*)\/?(\d*)?\/?$/.exec(url); const change_id = matches_url[2]; var change_ver = matches_url[3]; - if (typeof change_ver === 'undefined'){ + if (typeof change_ver === "undefined"){ change_ver = ci_latest_patchset(ci_parse_comments()); } - var status_url = zuul_status_url + change_id + ',' + change_ver; + var status_url = zuul_status_url + change_id + "," + change_ver; $.getJSON(status_url, function(data) { @@ -76,17 +79,17 @@ var main = function() { var jobs = []; if (data.length === 0){ - if ($('.result_WARNING').length > 0){ - location.reload(); - } - return; + if ($(".result_WARNING").length > 0){ + location.reload(); + } + return; } - for(i=0; i <= data.length; i++){ - queue = data[i]; - if (queue.items_behind.length == 0){ - break; - } + for(var i=0; i <= data.length; i++){ + queue = data[i]; + if (queue.items_behind.length == 0){ + break; + } } if (!queue){ @@ -97,14 +100,14 @@ var main = function() { $.each(queue.jobs, function(i, job) { var item = {}; - item.status = job.result ? job.result.toLowerCase() : (job.url ? 'running' : 'queued'); + item.status = job.result ? job.result.toLowerCase() : (job.url ? "running" : "queued"); item.name = job.name; - item.voting = job.voting + item.voting = job.voting; item.pipeline = job.pipeline; item.url = job.result ? job.report_url : (job.url ? zuul_status_base + job.url : "#"); - if (item.status === 'running' && job.remaining_time !== null){ - item.completeness = Math.round(100 * (job.elapsed_time / (job.elapsed_time + job.remaining_time))) + '%'; + if (item.status === "running" && job.remaining_time !== null){ + item.completeness = Math.round(100 * (job.elapsed_time / (job.elapsed_time + job.remaining_time))) + "%"; } jobs.push(item); @@ -119,18 +122,19 @@ var main = function() { // So we refresh on each update. -MutationObserver = window.MutationObserver || window.WebKitMutationObserver; +var MutationObserver = window.MutationObserver || window.WebKitMutationObserver; +/* eslint no-unused-vars: 0 */ var observer = new MutationObserver(function(mutations, observer) { - var span = $("span.rpcStatus"); - $.each(mutations, function(i, mutation) { - if (mutation.target === span[0] && + var span = $("span.rpcStatus"); + $.each(mutations, function(i, mutation) { + if (mutation.target === span[0] && mutation.attributeName === "style" && (!(span.is(":visible")))) { - main(); - } - }); + main(); + } + }); }); observer.observe(document, { - subtree: true, - attributes: true + subtree: true, + attributes: true }); diff --git a/cspell.json b/cspell.json index 0a8696d..15eb016 100644 --- a/cspell.json +++ b/cspell.json @@ -11,6 +11,7 @@ "envlist", "envs", "gerrit", + "hideci", "htmlcov", "ifeq", "ifndef",