1(function($){ 2 3 var discoursesearchprovider = { 4 'anchor': null, 5 'successHandler': null, 6 'term': '', 7 'config': JSINFO['plugins']['discoursesearch'] 8 }; 9 10 (function(_){ 11 12 _.addEntry = function() { 13 var entry = this; 14 var $node = $('<dl/>').addClass('search_results').appendTo( _.$root ); 15 16 var $link = $('<a/>').attr({ 17 'href': entry.url, 18 'target': '_blank' 19 }).text( entry.fancy_title ).addClass('externalurl wikilink1'); 20 21 $('<dt/>').appendTo( $node ).append( $link); 22 $('<dd/>').text( entry.blurb ).appendTo( $node ); 23 }; 24 25 _.filter = function( array, id ) { 26 var $return = null; 27 $.each( array, function() { 28 if ( this.topic_id && this.topic_id == id ) { 29 $return = this; 30 return false; 31 } 32 } ); 33 return $return; 34 }; 35 36 _.loadResults = function( url ) { 37 38 _.$root = $('<div/>').appendTo( _.anchor ); 39 40 $.getJSON( url + "/search/query.json?term=" + _.term ).done( function( data ) { 41 42 if ( !data.topics ) { return; } 43 44 $('<h3/>').text( _.config.title ).appendTo( _.$root ); 45 $.each( data.topics, function() { 46 var post = _.filter( data.posts, this.id ); 47 this.blurb = post ? post.blurb : ""; 48 this.url = url + "/t/" + this.slug + "/" + this.id; 49 _.addEntry.call( this ); 50 } ); 51 52 } ).always( function() { 53 _.finishedResults(); 54 }); 55 }; 56 57 _.finishedResults = function() { 58 if ( _.successHandler ) { 59 _.successHandler.call( _.anchor ); 60 } 61 }; 62 63 })(discoursesearchprovider); 64 65 if ( !discoursesearchprovider.config || discoursesearchprovider.config.url.length == 0 ) { 66 return; 67 } 68 69 $.asyncsearch.addProvider(function( term, successHandler ) { 70 discoursesearchprovider.anchor = this; 71 discoursesearchprovider.successHandler = successHandler; 72 discoursesearchprovider.term = term; 73 discoursesearchprovider.loadResults( discoursesearchprovider.config.url ); 74 }); 75})(jQuery); 76