From 2a8410717b86c8d458f9ff181270d9a257fbd1cf Mon Sep 17 00:00:00 2001 From: sslypushenko Date: Mon, 4 Aug 2014 18:02:27 +0300 Subject: [PATCH] HTML page updated to display updated capabilities Change-Id: Iad066d415ec2c079dac990c62d8bb9f2fa231cda --- capabilities.html | 103 +++++++++++++++++++++++----------- js/helpers.js | 140 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 211 insertions(+), 32 deletions(-) create mode 100644 js/helpers.js diff --git a/capabilities.html b/capabilities.html index 68075782..6350a6db 100644 --- a/capabilities.html +++ b/capabilities.html @@ -1,43 +1,82 @@ - OpenStack DefCore Tracked Capabilities - - - + + + + + + + -

OpenStack DefCore Tracked Capabilities

+ - + + +
+ +
+ +

Criterion descriptions

+ +
Copyright OpenStack Foundation, 2014. Apache 2 License.
diff --git a/js/helpers.js b/js/helpers.js new file mode 100644 index 00000000..0d1c00c4 --- /dev/null +++ b/js/helpers.js @@ -0,0 +1,140 @@ +function has_upper_case(str) { + return (/[A-Z]/.test(str)); +} + +function capitaliseFirstLetter(string){ + return string.charAt(0).toUpperCase() + string.slice(1); +} + +function code_url(text, render){ + return render( ' [github] ' ); +} + +function get_code_url (test_id) { + var id = test_id.split('/').join('.'); + var parts = id.split('.'); + var path_array = []; + for (var i in parts){ + if (has_upper_case(parts[i])) { break } + path_array.push(parts[i]) + } + path_array.pop(); + var path = path_array.join('/'); + var test = parts.slice(-1)[0] + '('; + test = test.replace(/\s+/g, ''); + path = path.replace(/\s+/g, ''); + var url = 'https://api.github.com/search/code?q=' + test + + ' repo:openstack/tempest extension:py path:' + path; + console.log(url); + $.when($.ajax({type: 'GET', url: url, dataType: 'json'})).done( + function (data, status, xhr) { + if (data['items'].length < 1) { + alert('No test found !') + } + var html_url = data['items'][0]['html_url']; + console.log(data['items'][0]['git_url']); + $.when($.ajax({type: 'GET', url: data['items'][0]['git_url'], dataType: 'json'})).done( + function (data, status, xhr) { + var content = window.atob(data['content'].replace(/\s+/g, '')).split('\n'); + for (var i in content) { + if (content[i].indexOf(test) > -1) { + var line = parseInt(i) + 1; + var url = html_url + '#L' + line; + var win = window.open(url, '_blank'); + win.focus(); + } + } + } + ) + }); + +} +function render_header(data){ + var template = $('#header_template').html(); + data["release"] = capitaliseFirstLetter(data["release"]); + var rendered = Mustache.render(template, data); + $("div#header").html(rendered); +} + +function render_caps(only_core, admin_filter, data){ + var template = $('#capabilities_template').html(); + var criteria_count = Object.keys(data['criteria']).length; + var caps_dict = {'capabilities': {}}; + var capabilities_count = 0; + for(var id in data['capabilities']){ + var capability = data['capabilities'][id]; + capability['class'] = id.split('-')[0]; + capability['id'] = id; + if (!(capability['class'] in caps_dict['capabilities'])){ + caps_dict['capabilities'][capability['class']] = { + 'items': [], + 'total': 0 + } + } + caps_dict['capabilities'][capability['class']]['total'] += 1; + if (only_core == true && (capability['core'] !== true)) {continue} + if (admin_filter == 'Tests require admin rights' && (capability['admin'] !== true)) {continue} + if (admin_filter == "Tests don't require admin rights" && (capability['admin'] == true)) {continue} + capability['code_url'] = function(){ + return code_url + }; + capability['achievements_count'] = capability['achievements'].length; + capability['tests_count'] = capability['tests'].length; + caps_dict['capabilities'][capability['class']]['items'].push(capability) + } + var caps_list={ + 'capabilities': [], + 'criteria_count': criteria_count + }; + for (var cls in caps_dict['capabilities']){ + if (caps_dict['capabilities'][cls]['items'].length == 0) { + continue + } + caps_list['capabilities'].push({ + 'class': cls, + 'items': caps_dict['capabilities'][cls]['items'], + 'count': caps_dict['capabilities'][cls]['items'].length, + 'total': caps_dict['capabilities'][cls]['total'] + }) + } + var rendered = Mustache.render(template, caps_list); + + $("div#capabilities").html(rendered); +} + +function render_criteria(data){ + var template = $('#criteria_template').html(); + var crits = {'criteria': []}; + for(var tag in data['criteria']){ + var criterion = data['criteria'][tag]; + criterion['tag'] = tag; + crits['criteria'].push(criterion); + } + var rendered = Mustache.render(template, crits); + + $("ul#criteria").html(rendered); +} + +function create_caps() { + + if (document.getElementById('only_core')){ + only_core = document.getElementById('only_core').checked + } + else only_core = true; + if (document.getElementById('admin')){ + admin_filter = document.getElementById('admin').value + } + else admin_filter = 'All tests'; + $.ajax({ + type: "GET", + dataType: 'json', + url: 'havanacore.json', + success: function(data, status, xhr) { + render_caps(only_core, admin_filter, data); + render_criteria(data); + render_header(data) + } + }); +} +window.onload = create_caps();