Changeset 415


Ignore:
Timestamp:
02/19/14 17:34:21 (6 years ago)
Author:
jls17
Message:
  • build a generic code base for the filtering logic and moved all the different code parts into separate functions
Location:
branches/work_304/res
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/work_304/res/actlinkList.js

    r414 r415  
    1 function bHasTypeFilter() { 
    2         return false; 
     1function FilterableTable(objTableId, objFilterId, objResultCountId) { 
     2        this.tableId = objTableId; 
     3        this.filterId = objFilterId; 
     4        this.resultCountId = objResultCountId; 
     5        this.maxMatches = 100; 
     6        this.lastMatches = 0; 
     7        this.lastIndex = 0; 
     8        this.nameIndex = 0; 
     9    this.table = $('#' + objTableId); 
    310} 
    411 
    5 function initTable(tableId, filterId, resultCountId) { 
    6     var table = $('#' + tableId); 
    7     table.data('filterid', filterId).data('resultid', resultCountId).data('maxresult', 100).data('lastmatches', 0); 
    8 } 
     12FilterableTable.prototype.hasTypeFilter = function() { return false; } 
     13FilterableTable.prototype.checkTypeFilterForRow = function(row) { return false; } 
     14FilterableTable.prototype.createHtmlRow = function(row) { return ""; } 
    915 
    10 function createMoreResultsRow(tableId, maxMatch) { 
     16FilterableTable.prototype.onHasTypeFilter = function(cb) { this.hasTypeFilter = cb; return this; } 
     17FilterableTable.prototype.onCheckTypeFilterForRow = function(cb) { this.checkTypeFilterForRow = cb; return this; } 
     18FilterableTable.prototype.onCreateHtmlRow = function(cb) { this.createHtmlRow = cb; return this; } 
     19 
     20FilterableTable.prototype.setNameIndex = function(idx) { this.nameIndex = idx; return this; } 
     21 
     22FilterableTable.prototype.createMoreResultsRow = function() { 
     23        var ft = this; 
    1124    return $("<tfoot>").append($("<tr>") 
    12     .append($("<td class='warn' colspan=9>").text("Result limit reached! ") 
    13             .append($("<a id=showNext href='javascript:void(0)'>Show Next " + maxMatch + "</a>").click(function() { 
     25    .append($("<td class='warn' colspan=99>").text("Result limit reached! ") 
     26            .append($("<a id=showNext href='javascript:void(0)'>Show Next " + ft.maxMatches + "</a>").click(function() { 
    1427                $(this).parents('tfoot:first').remove(); 
    15                 filterTable(tableId, 'next'); 
     28                ft.filterTable('next'); 
    1629            })) 
    1730            .append(" &nbsp; ") 
    1831            .append($("<a id=showAll href='javascript:void(0)'>Show All</a>").click(function() { 
    1932                $(this).parents('tfoot:first').remove(); 
    20                 filterTable(tableId, 'all'); 
     33                ft.filterTable('all'); 
    2134            })) 
    2235        )); 
    2336} 
    2437 
    25 function filterTable(tableId, appendNextChunk) { 
    26     var table = $('#' + tableId); 
    27     var search = $('#' + table.data('filterid')).val().replace(/ +/g, " ").replace(/ /g, ".*"); 
     38FilterableTable.prototype.filterTable = function(appendNextChunk) { 
     39    var table = this.table; //$('#' + tableId); 
     40        var list = window[this.tableId]; 
     41    var search = $('#' + this.filterId).val().replace(/ +/g, " ").replace(/ /g, ".*"); 
    2842    var numSearch = search.search("^\\d+$"); 
    29     var maxMatch = 0 + (table.data('maxresult')); 
     43    var maxMatch = this.maxMatches; 
    3044    var lastMatches = 0; 
    3145    var matches = 0; 
    32     var hasTypeFilter = bHasTypeFilter(); 
     46    var hasTypeFilter = this.hasTypeFilter(); 
    3347    var hasFilter = (search != null && search.length > 0) || hasTypeFilter; 
    3448    var start = 0; 
    35     var end = alList.length; 
     49    var end = list.length; 
    3650    var showAllMatches = appendNextChunk == 'all'; 
    3751 
    3852    if (appendNextChunk) { 
    39         start = table.data('lastindex'); 
    40         lastMatches += table.data('lastmatches'); 
     53        start = this.lastIndex; 
     54        lastMatches += this.lastMatches; 
    4155    } 
    4256    else { 
    43         $('#' + tableId + ' tbody,tfoot').remove(); 
     57        $('#' + this.tableId + ' tbody,tfoot').remove(); 
    4458    } 
    4559 
     
    4761        for (var i = start; i < end; i++) { 
    4862            var r = new RegExp(search, "i"); 
    49             if ((!hasTypeFilter || hasTypeFilter && schemaType[alList[i][5]]) && (alList[i][0].match(r) || (numSearch == 0 && ("" + alList[i][0]) == search))) { 
     63                        var row = list[i]; 
     64            if ((!hasTypeFilter || hasTypeFilter && this.checkTypeFilterForRow(row)) && (row[this.nameIndex].match(r) || (numSearch == 0 && ("" + row[0]) == search))) { 
    5065                matches++; 
    51                 table.append(createActlinkRowHtml(alList[i])); 
     66                table.append(this.createHtmlRow(row)); 
    5267            } 
    5368            if (!showAllMatches && matches >= maxMatch) { 
    54                 table.append(createMoreResultsRow(tableId, maxMatch)); 
    55                 table.data('lastindex', i + 1); 
    56                 table.data('lastmatches', lastMatches + matches); 
     69                table.append(this.createMoreResultsRow()); 
     70                this.lastIndex = i + 1; 
     71                this.lastMatches = lastMatches + matches; 
    5772                break; 
    5873            } 
    5974        }; 
    6075    } 
    61     $('#' + table.data('resultid')).text((hasFilter ? "showing " + (lastMatches + matches) + " out of " : "")); 
     76    $('#' + this.resultCountId).text((hasFilter ? "showing " + (lastMatches + matches) + " out of " : "")); 
    6277} 
    6378 
    6479function initActlinkTable() { 
    65     if (alList != null) { initTable('alList', 'actlinkFilter', 'actlinkListFilterResultCount'); } 
     80    if (alList != null) {  
     81                alListObj = new FilterableTable('alList', 'actlinkFilter', 'actlinkListFilterResultCount');  
     82                alListObj.onCreateHtmlRow(createActlinkRowHtml); 
     83        } 
    6684} 
    6785 
    6886function updateActlinkTable() { 
    69     if (alList != null) { filterTable('alList'); } 
     87    if (alListObj != null) { alListObj.filterTable(); } 
    7088} 
    7189 
     
    120138 
    121139    initActlinkTable(); 
    122     if ($("#actlinkFilter").focus().val() != "" || bHasTypeFilter()) { 
     140    if ($("#actlinkFilter").focus().val() != "" || alListObj.hasTypeFilter()) { 
    123141        updateActlinkTable(); 
    124142    }; 
  • branches/work_304/res/object_list.js

    r414 r415  
    1 var schemaType = new Array(); 
    2  
    3 function bHasTypeFilter() { 
    4     var allTypeOn = true; 
    5     var allTypeOff = true; 
    6     for (i = 1; i < 6; i++) { 
    7         schemaType[i] = $('#multiFilter input[value="' + i + '"]').attr('checked'); 
    8         if (schemaType[i]) { allTypeOff = false; } 
    9         if (!schemaType[i]) { allTypeOn = false; } 
    10     } 
    11     return !(allTypeOff || allTypeOn) 
     1function FilterableTable(objTableId, objFilterId, objResultCountId) { 
     2        this.tableId = objTableId; 
     3        this.filterId = objFilterId; 
     4        this.resultCountId = objResultCountId; 
     5        this.maxMatches = 100; 
     6        this.lastMatches = 0; 
     7        this.lastIndex = 0; 
     8        this.nameIndex = 0; 
     9    this.table = $('#' + objTableId); 
    1210} 
    1311 
    14 function initTable(tableId, filterId, resultCountId) { 
    15     var table = $('#' + tableId); 
    16     table.data('filterid', filterId).data('resultid', resultCountId).data('maxresult', 100).data('lastmatches', 0); 
    17 } 
     12FilterableTable.prototype.hasTypeFilter = function() { return false; } 
     13FilterableTable.prototype.checkTypeFilterForRow = function(row) { return false; } 
     14FilterableTable.prototype.createHtmlRow = function(row) { return ""; } 
    1815 
    19 function createMoreResultsRow(tableId, maxMatch) { 
     16FilterableTable.prototype.onHasTypeFilter = function(cb) { this.hasTypeFilter = cb; return this; } 
     17FilterableTable.prototype.onCheckTypeFilterForRow = function(cb) { this.checkTypeFilterForRow = cb; return this; } 
     18FilterableTable.prototype.onCreateHtmlRow = function(cb) { this.createHtmlRow = cb; return this; } 
     19 
     20FilterableTable.prototype.setNameIndex = function(idx) { this.nameIndex = idx; return this; } 
     21 
     22FilterableTable.prototype.createMoreResultsRow = function() { 
     23        var ft = this; 
    2024    return $("<tfoot>").append($("<tr>") 
    21     .append($("<td class='warn' colspan=7>").text("Result limit reached! ") 
    22             .append($("<a id=showNext href='javascript:void(0)'>Show Next " + maxMatch + "</a>").click(function() { 
     25    .append($("<td class='warn' colspan=99>").text("Result limit reached! ") 
     26            .append($("<a id=showNext href='javascript:void(0)'>Show Next " + ft.maxMatches + "</a>").click(function() { 
    2327                $(this).parents('tfoot:first').remove(); 
    24                 filterTable(tableId, 'next'); 
     28                ft.filterTable('next'); 
    2529            })) 
    2630            .append(" &nbsp; ") 
    2731            .append($("<a id=showAll href='javascript:void(0)'>Show All</a>").click(function() { 
    2832                $(this).parents('tfoot:first').remove(); 
    29                 filterTable(tableId, 'all'); 
     33                ft.filterTable('all'); 
    3034            })) 
    3135        )); 
    3236} 
    3337 
    34 function filterTable(tableId, appendNextChunk) { 
    35     var table = $('#' + tableId); 
    36     var search = $('#' + table.data('filterid')).val().replace(/ +/g, " ").replace(/ /g, ".*"); 
     38FilterableTable.prototype.filterTable = function(appendNextChunk) { 
     39    var table = this.table; //$('#' + tableId); 
     40        var list = window[this.tableId]; 
     41    var search = $('#' + this.filterId).val().replace(/ +/g, " ").replace(/ /g, ".*"); 
    3742    var numSearch = search.search("^\\d+$"); 
    38     var maxMatch = 0 + (table.data('maxresult')); 
     43    var maxMatch = this.maxMatches; 
    3944    var lastMatches = 0; 
    4045    var matches = 0; 
    41     var hasTypeFilter = bHasTypeFilter(); 
     46    var hasTypeFilter = this.hasTypeFilter(); 
    4247    var hasFilter = (search != null && search.length > 0) || hasTypeFilter; 
    4348    var start = 0; 
    44     var end = schemaList.length; 
     49    var end = list.length; 
    4550    var showAllMatches = appendNextChunk == 'all'; 
    4651 
    4752    if (appendNextChunk) { 
    48         start = table.data('lastindex'); 
    49         lastMatches += table.data('lastmatches'); 
     53        start = this.lastIndex; 
     54        lastMatches += this.lastMatches; 
    5055    } 
    5156    else { 
    52         $('#' + tableId + ' tbody,tfoot').remove(); 
     57        $('#' + this.tableId + ' tbody,tfoot').remove(); 
    5358    } 
    5459 
     
    5661        for (var i = start; i < end; i++) { 
    5762            var r = new RegExp(search, "i"); 
    58             if ((!hasTypeFilter || hasTypeFilter && schemaType[schemaList[i][5]]) && (schemaList[i][1].match(r) || (numSearch == 0 && ("" + schemaList[i][0]) == search))) { 
     63                        var row = list[i]; 
     64            if ((!hasTypeFilter || hasTypeFilter && this.checkTypeFilterForRow(row)) && (row[this.nameIndex].match(r) || (numSearch == 0 && ("" + row[0]) == search))) { 
    5965                matches++; 
    60                 table.append(createSchemaRowHtml(schemaList[i])); 
     66                table.append(this.createHtmlRow(row)); 
    6167            } 
    6268            if (!showAllMatches && matches >= maxMatch) { 
    63                 table.append(createMoreResultsRow(tableId, maxMatch)); 
    64                 table.data('lastindex', i + 1); 
    65                 table.data('lastmatches', lastMatches + matches); 
     69                table.append(this.createMoreResultsRow()); 
     70                this.lastIndex = i + 1; 
     71                this.lastMatches = lastMatches + matches; 
    6672                break; 
    6773            } 
    6874        }; 
    6975    } 
    70     $('#' + table.data('resultid')).text((hasFilter ? "showing " + (lastMatches + matches) + " out of " : "")); 
     76    $('#' + this.resultCountId).text((hasFilter ? "showing " + (lastMatches + matches) + " out of " : "")); 
    7177} 
    7278 
    7379function initSchemaTable() { 
    74     if (schemaList != null) { initTable('schemaList', 'formFilter', 'schemaListFilterResultCount'); } 
     80    if (schemaList != null) {  
     81                schemaListObj = new FilterableTable('schemaList', 'formFilter', 'schemaListFilterResultCount'); 
     82                schemaListObj.typeFilter = new Array(); 
     83                schemaListObj.onHasTypeFilter(function() { 
     84                        var allTypeOn = true; 
     85                        var allTypeOff = true; 
     86                        for (i = 1; i < 6; i++) { 
     87                                this.typeFilter[i] = $('#multiFilter input[value="' + i + '"]').attr('checked'); 
     88                                if (this.typeFilter[i]) { allTypeOff = false; } 
     89                                if (!this.typeFilter[i]) { allTypeOn = false; } 
     90                        } 
     91                        return !(allTypeOff || allTypeOn)                        
     92                }) 
     93                .onCheckTypeFilterForRow(function(row) { 
     94                        return schemaListObj.typeFilter[row[5]]; 
     95                }) 
     96                .setNameIndex(1) 
     97                .onCreateHtmlRow(createSchemaRowHtml); 
     98        } 
    7599} 
    76100 
    77101function updateSchemaTable() { 
    78     if (schemaList != null) { filterTable('schemaList'); } 
     102    if (schemaListObj != null) { schemaListObj.filterTable(); } 
    79103} 
    80104 
     
    111135 
    112136    initSchemaTable(); 
    113     if ($("#formFilter").focus().val() != "" || bHasTypeFilter()) { 
     137    if ($("#formFilter").focus().val() != "" || schemaListObj.hasTypeFilter()) { 
    114138        updateSchemaTable(); 
    115139    }; 
Note: See TracChangeset for help on using the changeset viewer.