Ignore:
Timestamp:
01/26/15 15:12:46 (9 years ago)
Author:
emanuel.dima@uni-tuebingen.de
Message:
  1. alpha14: collections view stable sorting, better filtering; upfront diagnostic messages for search
File:
1 edited

Legend:

Unmodified
Added
Removed
  • SRUAggregator/trunk/src/main/resources/assets/js/corpora.jsx

    r5931 r5954  
    2525
    2626        handleChange: function(event) {
    27                 this.setState({query: event.target.value});
    28                 this.props.search(event.target.value);
     27                var query = event.target.value;
     28                this.setState({query: query});
     29
     30                if (query.length === 0 || 2 <= query.length) {
     31                        this.props.search(query);
     32                }
    2933                event.stopPropagation();
    3034        },
     
    5155        },
    5256
    53         toggleSelection: function (corpus) {
     57        toggleSelection: function (corpus, e) {
    5458                var s = !corpus.selected;
    5559                this.props.corpora.recurseCorpus(corpus, function(c) { c.selected = s; });
    5660                this.props.corpora.update();
     61                this.stop(e);
    5762        },
    5863
     
    7681                };
    7782
    78                 this.props.corpora.recurse(function(corpus) { corpus.subCorpora.sort(sortFn); });
    79                 this.props.corpora.corpora.sort(sortFn);
    80 
    8183                query = query.toLowerCase();
    82                 var querytokens = query.split(" ");
    8384                if (!query) {
    8485                        this.props.corpora.recurse(function(corpus) {corpus.priority = 1; });
     
    9394
    9495                // find priority for each corpus
     96                var querytokens = query.split(" ").filter(function(x){ return x.length > 0; });
    9597                this.props.corpora.recurse(function(corpus){
    9698                        var title = corpus.title ? corpus.title : corpus.displayName;
     
    121123                }.bind(this));
    122124
    123                 // ensure root corpora have nonnull priority
    124                 this.props.corpora.recurse(function(corpus){
    125                         if (corpus.subCorpora) {
    126                                 corpus.subCorpora.forEach(function(subcorpus){
    127                                         if (subcorpus.priority > 0 && corpus.priority === 0)
    128                                                 corpus.priority ++;
    129                                 });
     125                // ensure parents of visible corpora are also visible; maximum depth = 3
     126                var isVisibleFn = function(corpus){ return corpus.priority > 0; };
     127                var parentBooster = function(corpus){
     128                        if (corpus.priority <= 0 && corpus.subCorpora) {
     129                                if (corpus.subCorpora.some(isVisibleFn)) {
     130                                        corpus.priority = 0.5;
     131                                }
    130132                        }
    131                 });
     133                };
     134                for (var i = 3; i > 0; i --) {
     135                        this.props.corpora.recurse(parentBooster);
     136                }
    132137
    133138                this.props.corpora.recurse(function(corpus) { corpus.subCorpora.sort(sortFn); });
     
    136141                // display
    137142                this.props.corpora.update();
    138                 // console.log("corpus search done", query);
     143        },
     144
     145        stop: function(e) {
     146                e.stopPropagation();
    139147        },
    140148
     
    167175                                                        <span className="glyphicon glyphicon-plus" aria-hidden="true"/>
    168176                                                }
    169                                                 {corpus.expanded ? " Collapse ":" Expand "} {corpus.subCorpora.length} subcollections
     177                                                {corpus.expanded ? " Collapse ":" Expand "} ({corpus.subCorpora.length} subcollections)
    170178                                        </a>
    171179                                </div>;
     
    179187        },
    180188
     189        renderFilteredMessage: function() {
     190                var total = 0;
     191                var visible = 0;
     192                this.props.corpora.recurse(function(corpus){
     193                        if (corpus.visible) {
     194                                total ++;
     195                                if (corpus.priority > 0) {
     196                                        visible++;
     197                                }
     198                        }
     199                });
     200                if (visible === total) {
     201                        return false;
     202                }
     203                return  <div> Showing {visible} out of {total} (sub)collections. </div>;
     204        },
     205
    181206        renderCorpus: function(level, minmaxp, corpus) {
    182                 if (!corpus.visible) {
     207                if (!corpus.visible || corpus.priority <= 0) {
    183208                        return false;
    184209                }
     
    187212                var corpusContainerClass = "corpus-container "+(corpus.priority>0?"":"dimmed");
    188213
    189                 var hue = 80 * corpus.priority / minmaxp[1];
    190                 if (corpus.priority > 0) { hue += 40; }
     214                var hue = 120 * corpus.priority / minmaxp[1];
    191215                var color = minmaxp[0] === minmaxp[1] ? 'transparent' : 'hsl('+hue+', 50%, 50%)';
    192                 var priorityStyle = {paddingBottom: 4, paddingLeft: 2, borderBottom: '2px solid '+color };
    193                 var expansive = corpus.expanded ? {}
     216                var priorityStyle = {paddingBottom: 4, paddingLeft: 2, borderBottom: '3px solid '+color };
     217                var expansive = corpus.expanded ? {overflow:'hidden'}
    194218                        : {whiteSpace:'nowrap', overflow:'hidden', textOverflow: 'ellipsis'};
    195219                var title = corpus.title || corpus.displayName;
     
    203227                                                <div className="col-sm-8 vcenter">
    204228                                                        <div style={indent}>
    205                                                                 <h3 style={expansive}>
    206                                                                         { corpus.landingPage ? <a href={corpus.landingPage}>{title}</a>: title }
     229                                                                <h3 style={expansive}>
     230                                                                        {title}
     231                                                                        { corpus.landingPage ?
     232                                                                                <a href={corpus.landingPage} onClick={this.stop}>
     233                                                                                        <span style={{fontSize:12}}> – Homepage </span><i className="fa fa-home"/>
     234                                                                                </a>: false}
    207235                                                                </h3>
    208236
     237
    209238                                                                <p style={expansive}>{corpus.description}</p>
     239                                                                {this.renderExpansion(corpus)}
    210240                                                        </div>
    211                                                         {this.renderExpansion(corpus)}
    212241                                                </div>
    213242                                                <div className="col-sm-3 vcenter">
     
    234263                                                </div>
    235264                                                <div className="float-right inline">
    236                                                         <div className="inline" style={{ marginRight: 20 }} >
    237                                                                 <SearchCorpusBox search={this.searchCorpus}/>
    238                                                         </div>
    239265                                                        <button className="btn btn-default" style={{ marginRight: 10 }} onClick={this.selectAll.bind(this,true)}>
    240266                                                                {" Select all"}</button>
     
    242268                                                                {" Deselect all"}</button>
    243269                                                </div>
     270                                                <div className="float-right inline">
     271                                                        <div className="inline" style={{ marginRight: 20 }} >
     272                                                                <SearchCorpusBox search={this.searchCorpus}/>
     273                                                                {this.renderFilteredMessage()}
     274                                                        </div>
     275                                                </div>
    244276                                        </div>
     277                                       
    245278                                        {this.props.corpora.corpora.map(this.renderCorpus.bind(this, 0, minmaxp))}
    246279                                </div>;
Note: See TracChangeset for help on using the changeset viewer.