From 6ee5d9c58d3461e9f90d532e16c7dde0a3aecbcc Mon Sep 17 00:00:00 2001 From: Magnus Hagander Date: Thu, 20 Dec 2018 11:15:31 +0100 Subject: [PATCH] Move featurematrix javascript into a separate script file --- media/css/main.css | 24 ++++++ media/js/featurematrix.js | 74 ++++++++++++++++++ templates/base/base.html | 1 + templates/featurematrix/featurematrix.html | 90 +--------------------- 4 files changed, 103 insertions(+), 86 deletions(-) create mode 100644 media/js/featurematrix.js diff --git a/media/css/main.css b/media/css/main.css index 5d948317..5fc26e34 100644 --- a/media/css/main.css +++ b/media/css/main.css @@ -1208,6 +1208,30 @@ h1.subject { font-size: 1.2em; } +/* Feature matrix */ +form#featurematrix_version_filter { + text-align: center; +} +input.featurematrix_version { + margin-right: 15px; +} +input.featurematrix_version:last-child { + margin-right: 0; +} +td.fm_no { + background-color: #ffdddd !important; +} +td.fm_yes { + background-color: #ddffdd !important; +} +td.fm_obs { + background-color: #ddddff !important; +} +td.fm_unk { + background-color: #ffffaa !important; +} + + /** ALL RESPONSIVE QUERIES HERE */ /* Small devices (landscape phones, 576px and up)*/ diff --git a/media/js/featurematrix.js b/media/js/featurematrix.js new file mode 100644 index 00000000..f82c4da2 --- /dev/null +++ b/media/js/featurematrix.js @@ -0,0 +1,74 @@ +/* + * Filter feature matrix + */ +$(document).ready(function(){ + var eol_versions = $('#feature-matrix-filter').data('eol').split(','); + + // Create form to contain filter checkboxes + $('#feature-matrix-filter').html('
Filter by version
'); + + // Generate a list of versions based on table column headers + $('table tr:first th').not('th:nth-child(1)').each(function(){ + var version_class = $(this).text().replace('.', ''); + + // Only mark a box as checked if no in the EOL list + var checked = (eol_versions.indexOf($(this).text()) == -1 ? 'checked="checked"' : ''); + + $('form#featurematrix_version_filter').append(' '); + }); + + // Add a checkbox to hide rows where all values are the same between + // displayed versions. Default: checked. + $('form#featurematrix_version_filter').append('
'); + + // Show/hide column based on whether supplied checkbox is checked. + function filter_version(checkbox) + { + var total_checked = $('form#featurematrix_version_filter .featurematrix_version:checked').length; + var column=$("table tr:first th").index($("table tr:first th:contains('" + checkbox.val() + "')")) + 1; + if (total_checked) { + $('.feature-version-col').css('width', (70 / total_checked) + '%'); + } + $("table th:nth-child(" + column + "), table td:nth-child(" + column + ")").toggle(checkbox.is(":checked")).toggleClass('hidden'); + hide_unchanged(); + // Lastly, if at this point an entire row is obsolete, then hide + $('tbody tr').each(function(i, el) { + var $tr = $(el), + visible_count = $tr.find('td:not(.hidden)').length, + obsolete_count = $tr.find('td.fm_obs:not(.hidden)').length; + // if visible count matches obsolete count, then hide this row + $tr.toggle(visible_count !== obsolete_count); + }); + } + + // Show/hide rows if all values are the same in displayed cells + function hide_unchanged() + { + var hide_unchanged=$('form#featurematrix_version_filter input#hide_unchanged').is(':checked'); + $('table tr').has('td').each(function(){ + var row_values=$(this).children('td').not('.colFirst, .hidden'); + var yes_count=row_values.filter(":contains('Yes')").length; + var no_count=row_values.filter(":contains('No')").length; + var obsolete_count=row_values.filter(":contains('Obsolete')").length; + $(this).toggle(hide_unchanged == false || (yes_count != row_values.length && no_count != row_values.length && obsolete_count != row_values.length)); + }); + } + + // Upon loading the page, apply the filter based on EOL versions that are + // unchecked. + $('form#featurematrix_version_filter input.featurematrix_version').not(':checked').each(function(){ + filter_version($(this)); + }); + + // Apply filter based on change in check status of clicked version filter. + $('form#featurematrix_version_filter input.featurematrix_version').on("change", function(){ + filter_version($(this)); + }); + + // Show/hide unchanged feature rows when checkbox clicked. + $('form#featurematrix_version_filter input#hide_unchanged').on("change", function(){ + hide_unchanged(); + }); +}); diff --git a/templates/base/base.html b/templates/base/base.html index 9ff7054a..3ae7f7d3 100644 --- a/templates/base/base.html +++ b/templates/base/base.html @@ -87,6 +87,7 @@ +{%block extrascript%}{%endblock%} - - +{%block extrascript%} + {%endblock%} + {%block contents%}

Feature Matrix

@@ -104,7 +22,7 @@ the text.

-
+
{% for group in groups %}