diff --git a/Gruntfile.js b/Gruntfile.js index c3bffb7..e3a7cab 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,65 +1,65 @@ -module.exports = function(grunt) { - +module.exports = function (grunt) { // Project configuration. grunt.initConfig({ - pkg: grunt.file.readJSON('package.json'), + pkg: grunt.file.readJSON("package.json"), sass: { dist: { options: { - style: 'compressed' + style: "compressed", }, - files: [{ - expand: true, - cwd: 'assets/styles', - src: ['**/*.sass'], - dest: 'public/css', - ext: '.css' - }] - } + files: [ + { + expand: true, + cwd: "assets/styles", + src: ["**/*.sass"], + dest: "public/css", + ext: ".css", + }, + ], + }, }, - coffee: { + uglify: { options: { sourceMap: true, - style: 'compressed' + compress: true, }, files: { expand: true, flatten: true, - cwd: 'assets/scripts', - src: ['*.coffee'], - dest: 'public/js', - ext: '.js' - } + cwd: "assets/scripts", + src: ["*.js"], + dest: "public/js", + ext: ".js", + }, }, watch: { css: { - files: ['assets/styles/**/*.sass'], - tasks: ['sass'], + files: ["assets/styles/**/*.sass"], + tasks: ["sass"], options: { atBegin: true, - spawn: false - } + spawn: false, + }, }, js: { - files: ['assets/scripts/**/*.coffee'], - tasks: ['coffee'], + files: ["assets/scripts/**/*.js"], + tasks: ["uglify"], options: { atBegin: true, - spawn: false - } - } - } + spawn: false, + }, + }, + }, }); // Load plugins. - grunt.loadNpmTasks('grunt-contrib-watch'); - grunt.loadNpmTasks('grunt-contrib-sass'); - grunt.loadNpmTasks('grunt-contrib-coffee'); + grunt.loadNpmTasks("grunt-contrib-watch"); + grunt.loadNpmTasks("grunt-contrib-sass"); + grunt.loadNpmTasks("grunt-contrib-uglify"); // CLI tasks. - grunt.registerTask('default', ['sass', 'coffee']); - + grunt.registerTask("default", ["sass", "uglify"]); }; diff --git a/assets/scripts/scar.coffee b/assets/scripts/scar.coffee deleted file mode 100644 index 70a7709..0000000 --- a/assets/scripts/scar.coffee +++ /dev/null @@ -1,2 +0,0 @@ -$ -> - console.log('Ready.') diff --git a/assets/scripts/scar.js b/assets/scripts/scar.js new file mode 100644 index 0000000..7c0320b --- /dev/null +++ b/assets/scripts/scar.js @@ -0,0 +1,3 @@ +$(document).ready(function () { + console.log("Ready."); +}); diff --git a/assets/scripts/test.coffee b/assets/scripts/test.coffee deleted file mode 100644 index d107045..0000000 --- a/assets/scripts/test.coffee +++ /dev/null @@ -1,62 +0,0 @@ -testId = $('#results-table').data('test-id') - -$ -> - $('#test-result-form').on 'submit', (e) -> - e.preventDefault() - - form = $(this) - formData = $(this).serialize() - benchmarkId = $(this).find('[name="result_benchmark"]').val() - - $.post '/api/v1/result/add', formData, (response) -> - if response == 'success' - fetchTestBenchmarkResults(testId, benchmarkId) - form[0].reset() - -fetchTestBenchmarkResults = (testId, benchmarkId) -> - try - benchmarkSearchParams = new URLSearchParams - benchmark_id: benchmarkId - benchmarkRes = await fetch("/api/v1/benchmark/details?#{benchmarkSearchParams}") - benchmarkData = await benchmarkRes.json() - - resultSearchParams = new URLSearchParams - test_id: testId - benchmark_id: benchmarkId - resultRes = await fetch("/api/v1/result/list?#{resultSearchParams}") - resultData = await resultRes.json() - - avg_total = 0 - min_total = 0 - max_total = 0 - - for result in resultData - avg_total += result.avgScore - min_total += result.minScore if result.minScore - max_total += result.maxScore if result.maxScore - - tableRow = $("#results-table tr[data-benchmark-id=#{benchmarkId}]") - tableRow.empty() - - tableRow.append('' + benchmarkData.name + '') - tableRow.append('' + benchmarkData.scoring + '') - tableRow.append('' + resultData.length + '') - - if resultData.length != 0 - tableRow.append('' + (avg_total / resultData.length) + '') - else - tableRow.append('N/a') - - if min_total != 0 - tableRow.append('' + (min_total / resultData.length) + '') - tableRow.append('' + (max_total / resultData.length) + '') - else - tableRow.append('N/a') - tableRow.append('N/a') - catch error - console.error 'An error occurred while fetching benchmark results.', error - -$('#results-table tbody tr').each (index, tr) -> - benchmarkId = $(tr).data('benchmark-id') - console.log("Fetching results for benchmark id: " + benchmarkId) - fetchTestBenchmarkResults(testId, benchmarkId) diff --git a/assets/scripts/test.js b/assets/scripts/test.js new file mode 100644 index 0000000..b348996 --- /dev/null +++ b/assets/scripts/test.js @@ -0,0 +1,82 @@ +const testId = $("#results-table").data("test-id"); + +$(function () { + $("#test-result-form").on("submit", function (e) { + e.preventDefault(); + + const form = $(this); + const formData = form.serialize(); + const benchmarkId = form.find('[name="result_benchmark"]').val(); + + $.post("/api/v1/result/add", formData, function (response) { + if (response === "success") { + fetchTestBenchmarkResults(testId, benchmarkId); + form[0].reset(); + } + }); + }); +}); + +async function fetchTestBenchmarkResults(testId, benchmarkId) { + try { + const benchmarkSearchParams = new URLSearchParams({ + benchmark_id: benchmarkId, + }); + const benchmarkRes = await fetch( + `/api/v1/benchmark/details?${benchmarkSearchParams}`, + ); + const benchmarkData = await benchmarkRes.json(); + + const resultSearchParams = new URLSearchParams({ + test_id: testId, + benchmark_id: benchmarkId, + }); + const resultRes = await fetch(`/api/v1/result/list?${resultSearchParams}`); + const resultData = await resultRes.json(); + + let avg_total = 0; + let min_total = 0; + let max_total = 0; + + for (const result of resultData) { + avg_total += result.avgScore; + if (result.minScore !== undefined) min_total += result.minScore; + if (result.maxScore !== undefined) max_total += result.maxScore; + } + + const tableRow = $(`#results-table tr[data-benchmark-id=${benchmarkId}]`); + tableRow.empty(); + + tableRow.append( + '' + + benchmarkData.name + + "", + ); + tableRow.append("" + benchmarkData.scoring + ""); + tableRow.append("" + resultData.length + ""); + + if (resultData.length !== 0) { + tableRow.append("" + avg_total / resultData.length + ""); + } else { + tableRow.append("N/a"); + } + + if (min_total !== 0) { + tableRow.append("" + min_total / resultData.length + ""); + tableRow.append("" + max_total / resultData.length + ""); + } else { + tableRow.append("N/a"); + tableRow.append("N/a"); + } + } catch (error) { + console.error("An error occurred while fetching benchmark results.", error); + } +} + +$("#results-table tbody tr").each(function (index, tr) { + const benchmarkId = $(tr).data("benchmark-id"); + console.log("Fetching results for benchmark id: " + benchmarkId); + fetchTestBenchmarkResults(testId, benchmarkId); +}); diff --git a/package-lock.json b/package-lock.json index 3a3a7a0..4dde274 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,8 +18,8 @@ "devDependencies": { "grunt": "^1.6.1", "grunt-cli": "^1.5.0", - "grunt-contrib-coffee": "^2.1.0", "grunt-contrib-sass": "^2.0.0", + "grunt-contrib-uglify": "^5.2.2", "grunt-contrib-watch": "^1.1.0", "nodemon": "^3.1.10", "sass": "^1.89.2" @@ -879,19 +879,6 @@ "node": ">=6" } }, - "node_modules/coffeescript": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-2.7.0.tgz", - "integrity": "sha512-hzWp6TUE2d/jCcN67LrW1eh5b/rSDKQK6oD6VMLlggYVUUFexgTH9z3dNYihzX4RMhze5FTUsUmOXViJKFQR/A==", - "dev": true, - "bin": { - "cake": "bin/cake", - "coffee": "bin/coffee" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -1121,6 +1108,13 @@ "node": ">= 0.4" } }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true, + "license": "MIT" + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -1398,6 +1392,22 @@ "node": ">=0.4.0" } }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", @@ -1834,24 +1844,6 @@ "node": ">=10" } }, - "node_modules/grunt-contrib-coffee": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-coffee/-/grunt-contrib-coffee-2.1.0.tgz", - "integrity": "sha512-lgP+pPY3mHl+gqAU0T+7BcocBWu0FyeeJnAG/iIp2I0GPa5LvZJ7Wqga6QwKQtQCTs+1gPEa12nuap9Lj08lhw==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "coffeescript": "^2.3.2", - "lodash": "^4.17.11", - "uri-path": "^1.0.0" - }, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "grunt": ">=0.4.5" - } - }, "node_modules/grunt-contrib-sass": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/grunt-contrib-sass/-/grunt-contrib-sass-2.0.0.tgz", @@ -1880,6 +1872,98 @@ "which": "bin/which" } }, + "node_modules/grunt-contrib-uglify": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-5.2.2.tgz", + "integrity": "sha512-ITxiWxrjjP+RZu/aJ5GLvdele+sxlznh+6fK9Qckio5ma8f7Iv8woZjRkGfafvpuygxNefOJNc+hfjjBayRn2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "maxmin": "^3.0.0", + "uglify-js": "^3.16.1", + "uri-path": "^1.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/grunt-contrib-uglify/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/grunt-contrib-uglify/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/grunt-contrib-uglify/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/grunt-contrib-uglify/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/grunt-contrib-uglify/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/grunt-contrib-uglify/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/grunt-contrib-watch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.1.0.tgz", @@ -2106,6 +2190,20 @@ "node": ">= 0.10" } }, + "node_modules/gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexer": "^0.1.1", + "pify": "^4.0.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -2693,6 +2791,101 @@ "node": ">= 0.4" } }, + "node_modules/maxmin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-3.0.0.tgz", + "integrity": "sha512-wcahMInmGtg/7c6a75fr21Ch/Ks1Tb+Jtoan5Ft4bAI0ZvJqyOw8kkM7e7p8hDSzY805vmxwHT50KcjGwKyJ0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "figures": "^3.2.0", + "gzip-size": "^5.1.1", + "pretty-bytes": "^5.3.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/maxmin/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/maxmin/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/maxmin/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/maxmin/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/maxmin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/maxmin/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/media-typer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", @@ -3347,6 +3540,16 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/prebuild-install": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", @@ -3382,6 +3585,19 @@ "node": ">=8" } }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -4423,6 +4639,19 @@ "node": ">= 0.6" } }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/uid-safe": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", diff --git a/package.json b/package.json index 09de53c..a4c1b19 100644 --- a/package.json +++ b/package.json @@ -30,8 +30,8 @@ "devDependencies": { "grunt": "^1.6.1", "grunt-cli": "^1.5.0", - "grunt-contrib-coffee": "^2.1.0", "grunt-contrib-sass": "^2.0.0", + "grunt-contrib-uglify": "^5.2.2", "grunt-contrib-watch": "^1.1.0", "nodemon": "^3.1.10", "sass": "^1.89.2"