简体   繁体   中英

How can I filter these search results in JavaScript?

I have a search.js file (part of a large script) that handles searching through files & folders and returning the results.

I am trying to filter the search results so that any file names or paths that contain "unwanted" are not displayed.

This is the search.js file in it's entirety:

FR = {
    UI: {translations:[]}
};

function setLookInValue() {
    var path = window.parent.FR.searching.path.replace('/ROOT/HOME', '');
    lookin.setValue(path ? path : '/');
    FR.grid.getStore().removeAll();
}

Ext.onReady(function() {
    window.parent.Ext.get(window.parent.FR.UI.searchPopup.getLayout().container.body.dom).unmask();
metadataField = new Ext.form.ComboBox({
    fieldLabel: FR.T('Metadata Field'),
    autoCreate:true, mode: 'local',
    emptyText:FR.T('Select...'),
    displayField:'filetype',
    valueField:'id', name: 'metadata_field_id', hiddenName:'metadata_field_id',
    editable: false, triggerAction:'all', disableKeyFilter: true,
    forceSelection:true, value:0, width:130,
    store: new Ext.data.SimpleStore({
        fields: ['id', 'filetype'],
        data: FR.metadataFields
    })
});
metadataValue = new Ext.form.TextField({
    fieldLabel: FR.T('Metadata'), name: 'metadata_value', width: 130, value: ''
});
FR.rightColumnFields = [];
if (window.parent.User.perms.metadata) {
    FR.rightColumnFields.push(metadataField);
    FR.rightColumnFields.push(metadataValue);
}
FR.rightColumnFields.push(new Ext.Button({
    text: FR.T('Search'),
    style: (!window.parent.User.perms.metadata ? '' : 'margin-left:98px'),
    handler: function(){
         ds.load({
            params:{
                filename: Ext.getCmp('filename').getValue(),
                keyword: Ext.getCmp('keyword').getValue(),
                metafield: metadataField.getValue(),
                metavalue: metadataValue.getValue(),
                path: encodeURIComponent(window.parent.FR.searching.path)
            }
        });
    }
}));

FR.form = new Ext.form.FormPanel({
    labelAlign: 'right',
    labelWidth: 90,
    border: false,
    hideBorders: true,
    bodyBorder: false,
    bodyStyle: 'padding:5px',
    items: [{
        layout:'column',
        items: [{
            columnWidth:.5,
            layout: 'form',
            border: false, bodyBorder: false,
            items: [{
                id: 'filename', xtype:'textfield',
                fieldLabel: FR.T('File name'),
                name: 'file_name', width: 130, value: ''
            },
            {
                id: 'keyword', xtype:'textfield',
                fieldLabel: FR.T('File contents'),
                name: 'file_contents',
                width: 130, value: '',
                disabled: !window.parent.Settings.fullTextSearch
            },
            lookin = new Ext.form.TextField({
                fieldLabel: FR.T('Look in'),
                name: 'lookin', width: 130, value: '', readOnly: true
            })
            ]
        },{
            columnWidth:.5,
            id: 'secondCol',
            layout: 'form',
            border: false,
            bodyBorder: false,
            items: FR.rightColumnFields
        }]
    }]
});

var ds = new Ext.data.Store({
    proxy: new Ext.data.HttpProxy({
        url: URLRoot+'/?module=search&section=ajax&page=search'
    }),
    reader: new Ext.data.JsonReader({
            root: 'files',
            totalProperty: 'totalCount',
            id: 'id'
        }, 
        [
            {name: 'icon'},
            {name: 'id'},
            {name: 'filename'},
            {name: 'path'},
            {name: 'technical_path'},
            {name: 'score', type: 'float'}
        ]
    )
});

var cm = new Ext.grid.ColumnModel({
    defaults: {sortable: true},
    columns: [
        {id: 'filename', header: FR.T("File name"), dataIndex: 'filename', width: 160,
            renderer: function (value, p, record) {
                return '<img src="'+URLRoot+'/images/fileman/file_icons/small/'+record.data.icon+'" width="16" height="16" align="absmiddle"> '+value;
            }
        },
        {id: 'path', header: FR.T("Path"), dataIndex: 'path'}
    ]
});
cm.defaultSortable = true;

grid = new Ext.grid.GridPanel({
    ds: ds,
    cm: cm,
    border: false, bodyBorder: false, hideBorders: true,
    selModel: new Ext.grid.RowSelectionModel({singleSelect:true}),
    loadMask: {msg: FR.T('Searching...')},
    enableColumnHide: false,
    enableColumnMove: false,
    autoExpandColumn: 'path',
    selModel: new Ext.grid.RowSelectionModel({singleSelect:true})
});

grid.on('rowclick', function (grid, rowIndex, e){
    var rowData = grid.getStore().data.items[rowIndex].data;
    var path = rowData.technical_path;
    var filename = rowData.filename;
    if (window.parent.FR.currentPath != path) {
        window.parent.FR.UI.tree.panel.selectPath(path, 'pathname', function() {
            window.parent.FR.UI.grid.highlightOnDisplay = filename;
        });
    } else {
        window.parent.FR.UI.grid.highlight(filename);
    }
});

grid.on('rowcontextmenu', function(grid, rowIndex, e) {e.stopEvent();return false;})
FR.grid = grid;

new Ext.Viewport({
    layout: 'border',
    hideBorders: true,
    items: [
        {
            region: 'north', layout: 'fit', split: true, height:100,
            hideBorders: true, bodyBorder: false, border: false,
            items: [FR.form]
        },
        {
            region: 'center', layout: 'fit', autoHeigh: true,
            items: grid
        }
    ]
});
setLookInValue();
});

I'm pretty lost. I thought somewhere in the code I could do something like:

if (someVar.indexOf("unwanted") == -1) { ...

Is there anything in this JavaScript that would give anyone enough info to help me filter these search results?

This looks like code that uses Ext JS, and I have added a tag accordingly. A little sniffing through the documentation suggests that the Filtering and Sorting section of the Ext.data.Store page will put you on the right track.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM