define( function ( require, exports, module ) { var data = ( function ( origin ) { var ret = [], length = origin.length, i; var id = 1000; for ( i = 0; i < length; i++ ) { if ( +( origin[ i ][ 1 ] ) >= 0 ) { ret.push( { id: id++, seq: origin[ i ][ 0 ].split( '->' ), length: +origin[ i ][ 1 ], uv: +origin[ i ][ 2 ] } ); } } return ret; } )( require( '../pathdiagram/data' ) ); var length = data.length; var abs = Math.abs; function subseqIndex( seq, sub ) { var i = 0, j = 0, iLength = seq.length, jLength = sub.length, iPreserve = 0; while ( true ) { if ( seq[ i ] != sub[ j ] ) { i = ++iPreserve; j = 0; if ( i >= iLength ) { return -1; } continue; } if ( seq[ i ] == sub[ j ] ) { i++; j++; } if ( j == jLength ) { return iPreserve; } } } return { random: function ( minUv ) { var keywords = []; for ( var i = 0; i < length; i++ ) { if ( data[ i ].length === 0 ) { keywords.push( data[ i ] ); } } minUv = minUv || 5000; var ret; while ( !ret || ret.uv < minUv ) { ret = keywords[ Math.floor( Math.random() * keywords.length ) ]; } ret.word = ret.seq[0]; return ret; }, search: function( keyword ) { var result = [], ret; for ( var i = 0; i < length; i++ ) { if ( data[ i ].length === 0 && data[i].seq[0].indexOf(keyword) != -1 ) { result.push( data[i] ); } } if(!result.length) { return this.random(); } result.sort(function(a, b) { return b.uv - a.uv; }); ret = result[0]; ret.word = ret.seq[0]; return ret; }, upstream: function ( path ) { var upstream = []; for ( var i = 0; i < length; i++ ) { if ( subseqIndex( data[ i ].seq, path.seq ) > 0 && data[ i ].length == path.length + 1 ) { upstream.push( { id: data[ i ].id, seq: data[ i ].seq, length: data[ i ].length, uv: data[ i ].uv, word: data[ i ].seq[ 0 ] } ); } } return upstream; }, downstream: function ( path ) { var downstream = []; for ( var i = 0; i < length; i++ ) { if ( subseqIndex( data[ i ].seq, path.seq ) === 0 && data[ i ].length == path.length + 1 ) { downstream.push( { id: data[ i ].id, seq: data[ i ].seq, length: data[ i ].length, uv: data[ i ].uv, word: data[ i ].seq[ data[ i ].length - 1 ] } ); } } return downstream; } }; } );