PageRenderTime 53ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 0ms

/src/plugins/websearch/templates/themes/original/js/render.js

https://github.com/sileht/debbot-seeks
JavaScript | 234 lines | 187 code | 34 blank | 13 comment | 81 complexity | 11ee42244cd2d0927cc792b6c3de7464 MD5 | raw file
  1. /* main result widget stuff. */
  2. snippetTxtTemplate =
  3. '<li class="search_snippet">{headHTML}<a href="{url}">{title}</a>{enginesHTML}</h3><div>{summary}</div><div><cite>{cite}</cite><a class="search_cache" href="{cached}">Cached</a><a class="search_cache" href="{archive}">Archive</a><a class="search_cache" href="/search?q={\
  4. enc_query}&amp;page=1&amp;expansion=1&amp;action=similarity&amp;id={id}&amp;engines=">Similar</a></div></li>';
  5. snippetImgTemplate =
  6. '<li class="search_snippet search_snippet_img"><h3><a href="{url}"><img src="{cached}"></a><div>{title}{enginesHTML}</div></h3><cite>{cite}</cite><br><a class="search_cache" href="{cached}">Cached</a></li>';
  7. snippetVidTemplate =
  8. '<li class="search_snippet search_snippet_vid"><a href="{url}"><img class="video_profile" src="{cached}"></a>{headHTML}<a href="{url}">{title}</a>{enginesHTML}</h3><div><cite>{date}</cite></div></li>';
  9. snippetTweetTemplate =
  10. '<li class="search_snippet"><a href="{cite}"><img class="tweet_profile" src="{cached}" ></a><h3><a href="{url}">{title}</a></h3><div><cite>{cite}</cite><date> ({date})</date><a class="search_cache" href="/search?q={enc_query}&page=1&expansion=1&action=similarity&id={id}\
  11. &engines=twitter">Similar</a></div></li>';
  12. persTemplateFlag = '{prs}';
  13. failureTemplate = '';
  14. var outputDiv = Y.one("#main"), expansionLnk = Y.one("#expansion"), suggDiv = Y.one("#search_sugg"),
  15. pagesDiv = Y.one("#search_page_current"), persHref = Y.one("#tab-pers"), langSpan = Y.one('#tab-language'),
  16. persSpan = Y.one("#tab-pers-flag"), pagePrev = Y.one("#search_page_prev"), pageNext = Y.one("#search_page_next");
  17. function render_snippet(snippet,pi,query_words)
  18. {
  19. var snippet_html = '';
  20. // personalization & title head.
  21. if (snippet.personalized == 'yes')
  22. {
  23. snippet.headHTML = '<h3 class=\"personalized_result personalized\" title=\"personalized result\">';
  24. }
  25. else
  26. {
  27. snippet.headHTML = '<h3>';
  28. }
  29. // render url capture.
  30. if (pi.prs == "on")
  31. {
  32. snippet.url = "@base-url@/qc_redir?q=" + enc_query + "&url=" + encodeURIComponent(snippet.url);
  33. }
  34. // render engines.
  35. snippet.enginesHTML = '';
  36. for (j=0, le=snippet.engines.length; j < le; ++j)
  37. {
  38. snippet.enginesHTML += '<span class=\"search_engine search_engine_' + snippet.engines[j] + '\" title=\"' + snippet.engines[j] + '\"><a href=\"';
  39. snippet.enginesHTML += '@base-url@/search';
  40. if (ti.img == 1)
  41. snippet.enginesHTML += '_img';
  42. snippet.enginesHTML += '?q=' + enc_query;
  43. snippet.enginesHTML += '&page=1&expansion=1&action=expand&engines=' + snippet.engines[j] + '\">';
  44. snippet.enginesHTML += '</a></span>';
  45. }
  46. // encoded query.
  47. snippet.enc_query = enc_query;
  48. // render summary.
  49. for (var i=0;i<query_words.length;i++)
  50. {
  51. var regx = new RegExp(query_words[i],"gi");
  52. snippet.summary = snippet.summary.replace(regx,"<b>" + query_words[i] + "</b>");
  53. }
  54. if ('words' in snippet)
  55. {
  56. for (var i=0;i<snippet.words.length;i++)
  57. {
  58. var regx = new RegExp(snippet.words[i],"gi");
  59. snippet.summary = snippet.summary.replace(regx,"<span class=\"highlight\">" + snippet.words[i] + "</span>");
  60. }
  61. }
  62. var shtml = '';
  63. if (ti.txt == 1)
  64. shtml = Y.substitute(snippetTxtTemplate, snippet);
  65. else if (ti.img == 1)
  66. shtml = Y.substitute(snippetImgTemplate, snippet);
  67. else if (ti.vid == 1)
  68. shtml = Y.substitute(snippetVidTemplate, snippet);
  69. else if (ti.twe == 1)
  70. shtml = Y.substitute(snippetTweetTemplate, snippet);
  71. return shtml;
  72. }
  73. function render_snippets(rsnippets,pi)
  74. {
  75. var snippets_html = '<div id="search_results"><ol>';
  76. if (pi.prs == "on")
  77. rsnippets.sort(sort_score);
  78. else rsnippets.sort(sort_meta);
  79. var query_words = query.split(" ");
  80. var k = 0;
  81. for (id in rsnippets)
  82. {
  83. var snippet = rsnippets[id]
  84. k++;
  85. if (k < (pi.cpage-1) * pi.rpp)
  86. continue;
  87. else if (k > pi.cpage * pi.rpp)
  88. break;
  89. snippets_html += render_snippet(snippet,pi,query_words);
  90. }
  91. return snippets_html + '</ol></div>';
  92. return snippets_html + '</ol></div>';
  93. }
  94. var isEven = function(someNumber)
  95. {
  96. return (someNumber%2 == 0) ? true : false;
  97. }
  98. function render_clusters(clusters,labels,pi)
  99. {
  100. var clusters_html = '<div id="search_results" class="yui3-g clustered">';
  101. var clusters_c1_html = '<div class="yui3-u-1-2 first">';
  102. var clusters_c2_html = '<div class="yui3-u-1-2">';
  103. for (c=0;c<clustered;++c)
  104. {
  105. var chtml = '';
  106. if (isEven(c))
  107. clusters_c1_html = render_cluster(clusters[c],labels[c],clusters_c1_html,pi);
  108. else clusters_c2_html = render_cluster(clusters[c],labels[c],clusters_c2_html,pi);
  109. }
  110. return clusters_html + clusters_c1_html + "</div>" + clusters_c2_html + "</div></div></div>";
  111. }
  112. function render_cluster(cluster,label,chtml,pi)
  113. {
  114. var l = cluster.length;
  115. if (l == 0)
  116. return chtml;
  117. var query_words = query.split(" ");
  118. chtml += '<div class="cluster"><h2>' + label + ' <font size="2"> (' + l + ')</font></h2><br><ol>';
  119. for (i=0;i<l;++i)
  120. {
  121. var s = cluster[i];
  122. var shtml = render_snippet(s,pi,query_words);
  123. chtml += shtml;
  124. }
  125. chtml += '</ol><div class="clear"></div></div>';
  126. return chtml;
  127. }
  128. function render()
  129. {
  130. var pi;
  131. if (ti.txt == 1)
  132. pi = pi_txt;
  133. else if (ti.img == 1)
  134. pi = pi_img;
  135. else if (ti.vid == 1)
  136. pi = pi_vid;
  137. else if (ti.twe == 1)
  138. pi = pi_twe;
  139. var clusters;
  140. if (clustered > 0)
  141. {
  142. clusters = new Array(clustered);
  143. for (i=0;i<clustered;++i)
  144. clusters[i] = new Array();
  145. }
  146. var rsnippets = [];
  147. var ns = 0;
  148. for (id in hashSnippets)
  149. {
  150. var snippet = hashSnippets[id];
  151. // check snippet type for rendering.
  152. if (ti.txt == 1
  153. && (snippet.type == "image" || snippet.type == "video_thumb" || snippet.type == "tweet"))
  154. continue;
  155. if (ti.img == 1 && snippet.type != "image")
  156. continue;
  157. else if (ti.vid == 1 && snippet.type != "video_thumb")
  158. continue;
  159. else if (ti.twe == 1 && snippet.type != "tweet")
  160. continue;
  161. if (clustered > 0)
  162. {
  163. if ('cluster' in snippet)
  164. {
  165. clusters[snippet.cluster].push(snippet);
  166. }
  167. }
  168. else rsnippets.push(snippet);
  169. ns++;
  170. }
  171. // render snippets.
  172. var output_html = '';
  173. if (clustered > 0)
  174. output_html = render_clusters(clusters,labels,pi);
  175. else output_html = render_snippets(rsnippets,pi);
  176. outputDiv.setContent(output_html);
  177. // compute page number.
  178. var p = new rpage();
  179. p.cpage = pi.cpage;
  180. var max_page = 1;
  181. if (ns > 0)
  182. max_page = ns / pi.rpp;
  183. pagesDiv.setContent(pi.cpage);
  184. if (pi.cpage > 1)
  185. pagePrev.setStyle('display',"inline");
  186. else pagePrev.setStyle('display',"none");
  187. if (pi.cpage < max_page)
  188. pageNext.setStyle('display',"inline");
  189. else pageNext.setStyle('display',"none");
  190. // expansion image.
  191. expansionLnk.setAttribute('class',"expansion_" + String(pi.expansion));
  192. expansionLnk.setContent(pi.expansion);
  193. // personalization.
  194. var persHTMLf = Y.substitute(persTemplateFlag, pi);
  195. persSpan.setContent(persHTMLf);
  196. // render language.
  197. langSpan.setContent(lang);
  198. // query suggestion.
  199. suggDiv.setContent(pi.suggestion);
  200. }