fdp-main.js 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. /**
  2. * 注册命名空间:baidu.fdp
  3. */
  4. baidu.namespace.register("baidu.fdphelper");
  5. /**
  6. * 栅格相关处理
  7. * @author zhaoxianlie
  8. */
  9. baidu.fdphelper = (function(){
  10. /**
  11. * 当前的搜索范围,默认为FDP搜索
  12. */
  13. var _G_CUR_DOC_ = 'fdp';
  14. /**
  15. * 文档路径
  16. */
  17. var _DOC_PATH = {
  18. fdp : "http://fe.baidu.com/space/doc/",
  19. fe : "http://fe.baidu.com/doc/"
  20. };
  21. /**
  22. * 数据缓存
  23. */
  24. var _dataCache = {
  25. fdp : [],
  26. fe : []
  27. };
  28. /**
  29. * 获取FDP文档数据
  30. */
  31. var _getFdpDocData = function(){
  32. if(!_dataCache.fdp.length) {
  33. var url = 'http://fe.baidu.com/space/static/js/doc_data.js?v=' + (new Date() - 1);
  34. //向background发送一个消息,要求其加载并处理js文件内容
  35. chrome.extension.sendMessage({
  36. type : MSG_TYPE.GET_JS,
  37. link : url
  38. },function(respData){
  39. eval(respData.content);
  40. _parseFdpDocData(g_docData);
  41. jQuery('#num-fdp-doc').html(_dataCache.fdp.length);
  42. });
  43. }
  44. };
  45. /**
  46. * 获取FE文档数据
  47. */
  48. var _getFeDocData = function(){
  49. if(!_dataCache.fe.length) {
  50. var url = 'http://fe.baidu.com/doc/_ADoc/search/Data/docData.js?v=' + (new Date() - 1);
  51. //向background发送一个消息,要求其加载并处理js文件内容
  52. chrome.extension.sendMessage({
  53. type : MSG_TYPE.GET_JS,
  54. link : url
  55. },function(respData){
  56. eval(respData.content);
  57. _dataCache.fe = docData;
  58. jQuery('#num-fe-doc').html(docData.length);
  59. });
  60. }
  61. };
  62. /**
  63. * 解析Fdp平台文档数据
  64. * @param {Object} fdpData
  65. */
  66. var _parseFdpDocData = function(fdpData){
  67. _dataCache.fdp = [];
  68. var t;
  69. for(var url in fdpData) {
  70. t = fdpData[url];
  71. _dataCache.fdp.push({
  72. url : url,
  73. title : t[0],
  74. author : t[1],
  75. mtime : t[2]
  76. });
  77. }
  78. };
  79. /**
  80. * 在data数据中搜索key,分别在title和author中进行模糊匹配
  81. * @param {Object} data
  82. * @param {Object} key
  83. */
  84. var _searchAdoc = function(data,key) {
  85. var titleResult = [];
  86. var authorResult = [];
  87. var urlResult = [];
  88. try {
  89. var reg = new RegExp(key, 'i');
  90. for (var i = 0, l = data.length; i < l; i++) {
  91. var item = data[i];
  92. if (reg.test(item['title'])) {
  93. titleResult.push(item);
  94. } else if (reg.test(item['author'])) {
  95. authorResult.push(item);
  96. } else if (reg.test(item['url'])) {
  97. urlResult.push(item);
  98. }
  99. }
  100. return titleResult.concat(authorResult.concat(urlResult));
  101. } catch (e) {
  102. return [];
  103. }
  104. };
  105. /**
  106. * 将关键字进行加粗高亮显示
  107. * @param {Object} word
  108. * @param {Object} key
  109. */
  110. var _searchLighter = function(word, key) {
  111. var reg = new RegExp(key, 'ig');
  112. return word.replace(reg,
  113. function ($0) {
  114. return '<b class="-d-highlight">' + $0 + '</b>';
  115. }
  116. );
  117. };
  118. /**
  119. * 执行文档检索
  120. */
  121. var _doDocSearch = function() {
  122. //获取关键字
  123. var key = jQuery('#fdp-search-input').val().trim();
  124. //结果显示
  125. var $resultEl = jQuery('#fdp-doc-rst-list');
  126. //关键字为空
  127. if (key.length === 0) {
  128. $resultEl.html('<div class="-d-no-result">请输入关键字进行检索</div>');
  129. return;
  130. }
  131. //执行检索
  132. var data = _searchAdoc(_dataCache[_G_CUR_DOC_],key);
  133. if (data.length === 0) {
  134. $resultEl.html('<div class="-d-no-result">很抱歉,没有结果</div>');
  135. return;
  136. }
  137. //搜索结果的显示模板
  138. var tpl = '<dd>' +
  139. '<i>[{4}] </i>' +
  140. '<a href="{1}" target="_blank" title="{2}">{0}</a>' +
  141. '<span class="-d-author">{3}</span>' +
  142. '</dd>';
  143. var html = ['<dt>检索结果:共找到 <b class="-d-highlight">' + data.length + '</b> 个文档</dt>'];
  144. //显示结果
  145. for (var i = 0, l = data.length; i < l; i++) {
  146. if (i > 300) { //超过300个结果,则表示关键字太模糊了
  147. break;
  148. }
  149. var item = data[i];
  150. var url = item['url'];
  151. var title = item['title'];
  152. //下面获取文件类型
  153. var lastDotIndex = url.lastIndexOf('.');
  154. var fileType = '';
  155. if (lastDotIndex >= 0) {
  156. fileType = url.substr(lastDotIndex + 1);
  157. }
  158. //结果填充
  159. html.push(
  160. tpl.format(
  161. _searchLighter(item['title'], key),
  162. _DOC_PATH[_G_CUR_DOC_] + url,
  163. title,
  164. _searchLighter(item['author'], key),
  165. fileType.toLowerCase()
  166. )
  167. );
  168. }
  169. //结果显示
  170. $resultEl.html(html.join(''));
  171. };
  172. /**
  173. * 绑定“FDP文档”和“FE文档”的点击事件
  174. */
  175. var _bindDocSourceEvent = function(){
  176. jQuery('#fdp-doc-nav .-d-normal').click(function(e){
  177. var $this = jQuery(this);
  178. $this.addClass('-d-selected').siblings('li').removeClass('-d-selected');
  179. if($this.is('#fdp-doc')) {
  180. _getFdpDocData();
  181. _G_CUR_DOC_ = 'fdp';
  182. } else if($this.is('#fe-doc')) {
  183. _getFeDocData();
  184. _G_CUR_DOC_ = 'fe';
  185. }
  186. _doDocSearch();
  187. });
  188. };
  189. /**
  190. * 绑定“搜索”框的点击事件
  191. */
  192. var _bindSearchInputEvent = function(){
  193. jQuery('#fdp-search-input').keyup(function(e){
  194. _doDocSearch();
  195. });
  196. };
  197. /**
  198. * 绑定“搜索”按钮的点击事件
  199. */
  200. var _bindSearchBtnEvent = function(){
  201. jQuery('#fdp-search-btn').click(function(e){
  202. _doDocSearch();
  203. });
  204. };
  205. /**
  206. * 初始化
  207. */
  208. var _init = function(){
  209. //获取FDP文档数据
  210. _getFdpDocData();
  211. //获取FE文档数据
  212. _getFeDocData();
  213. //绑定“FDP文档”和“FE文档”的点击事件
  214. _bindDocSourceEvent();
  215. //绑定“搜索”按钮的点击事件
  216. _bindSearchBtnEvent();
  217. //绑定“搜索”框的点击事件
  218. _bindSearchInputEvent();
  219. };
  220. return {
  221. init : _init
  222. };
  223. })();
  224. jQuery(function(){
  225. baidu.fdphelper.init();
  226. });