search.mak 4.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <%inherit file="local:templates.master"/>
  2. <%namespace name="POD" file="pboard.templates.pod"/>
  3. <%def name="title()">
  4. pod :: your dashboard
  5. </%def>
  6. <div class="row">
  7. <div class="span6">
  8. <form class="form-search" action="${tg.url('/search')}">
  9. <div class="input-append">
  10. <input name="keywords" type="text" class="span2 search-query" placeholder="Search" value="${context.get('search_string', '')}">
  11. <button title="${_('Search again')}" class="btn" type="submit"><i class="fa fa-search"></i></button>
  12. </div>
  13. </form>
  14. </div>
  15. </div>
  16. <div class="row">
  17. <div class="span6">
  18. <p>
  19. <i class="pod-blue fa fa-search"></i>
  20. ${_("Results")}
  21. <span class="badge badge-info">${len(found_nodes)} result(s)</span>
  22. % for keyword in search_string.split():
  23. <span class="label">${keyword}</span>
  24. % endfor
  25. </p>
  26. </div>
  27. </div>
  28. <div class="row">
  29. <div class="span6">
  30. #######
  31. ## SHOW RESULT FILTERING TOOLBAR
  32. <span>Filter results:</span>
  33. <div class="btn-group search-result-toogle-buttons" data-toggle="buttons-checkbox">
  34. % for data_type in ('file', 'event', 'data', 'contact', 'comment'):
  35. <button
  36. id="search-result-toogle-button-${data_type}"
  37. class="btn search-result-dynamic-toogle-button"
  38. title="Show/hide ${POD.DocumentTypeLabel(data_type)} results"
  39. >
  40. <i class=" ${POD.IconCssClass(data_type)}"></i>
  41. <sup style="color: #5BB75B;"><i class="fa fa-check"></i></sup>
  42. </button>
  43. % endfor
  44. </div>
  45. </div>
  46. </div>
  47. <script>
  48. $('.search-result-toogle-buttons > button.search-result-dynamic-toogle-button').addClass('active');
  49. $('#search-result-toogle-button-file').click(function () {
  50. $('.search-result-file').toggle();
  51. $('#search-result-toogle-button-file > sup').toggle();
  52. });
  53. $('#search-result-toogle-button-event').click(function () {
  54. $('.search-result-event').toggle();
  55. $('#search-result-toogle-button-event > sup').toggle();
  56. });
  57. $('#search-result-toogle-button-data').click(function () {
  58. $('.search-result-data').toggle();
  59. $('#search-result-toogle-button-data > sup').toggle();
  60. });
  61. $('#search-result-toogle-button-contact').click(function () {
  62. $('.search-result-contact').toggle();
  63. $('#search-result-toogle-button-contact > sup').toggle();
  64. });
  65. $('#search-result-toogle-button-comment').click(function () {
  66. $('.search-result-comment').toggle();
  67. $('#search-result-toogle-button-comment > sup').toggle();
  68. });
  69. </script>
  70. % if found_nodes==None or len(found_nodes)<=0:
  71. #######
  72. ## No result view
  73. <div class="row">
  74. <p class="alert">
  75. <i class="fa fa-exclamation-triangle"></i>
  76. ${_("No data found for keywords:")} <i>${search_string}</i>
  77. </p>
  78. </div>
  79. % else:
  80. #######
  81. ## Standard result view
  82. ## <hr/>
  83. <div class="row">
  84. <div class="span12">
  85. % for result_id, node in enumerate(found_nodes):
  86. <div class="row">
  87. <div class="span5 search-result-item search-result-${node.node_type}">
  88. <h5 title="${node.data_label}">
  89. % if node.node_type=='data' or node.parent_id==None:
  90. <a href="${POD.DocumentUrl(node.node_id, search_string)}">
  91. % else:
  92. <a href="${POD.DocumentUrlWithAnchor(node.parent_id, search_string, 'tab-%ss'%node.node_type)}">
  93. % endif
  94. <i class="${node.getIconClass()}"></i>
  95. ${node.data_label}
  96. <span class="label ${node.getStatus().css} pull-right" title="${node.getStatus().label}">
  97. <i class="${node.getStatus().icon}"></i>
  98. <span>
  99. </a>
  100. </h5>
  101. ## Now show the breakcrumb in a google-like manner
  102. <div>
  103. % for parent_node in node.getBreadCrumbNodes():
  104. <a style="color: #468847;" href="${POD.DocumentUrl(parent_node.node_id, search_string)}" title="${parent_node.data_label}">${parent_node.getTruncatedLabel(30)}</a>
  105. <span style="color: #468847;" >/</span>
  106. % endfor
  107. <a style="color: #468847;" href="${POD.DocumentUrl(node.node_id, search_string)}" title="${node.data_label}">
  108. ${node.getTruncatedLabel(30)}
  109. </a>
  110. </div>
  111. <div class="row">
  112. <p class="span5">${node.getContentWithHighlightedKeywords(search_string.split(), node.getTruncatedContentAsText(200))|n}</p>
  113. </div>
  114. ## <hr/>
  115. </div>
  116. </div>
  117. % endfor
  118. </div>
  119. % endif
  120. </div>