You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

search.js 32 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811
  1. var token;
  2. if(isEmpty(token)){
  3. var meta = $("meta[name=_uid]");
  4. if(!isEmpty(meta)){
  5. token = meta.attr("content");
  6. console.log("token is uid:" + token);
  7. }
  8. }
  9. var html =document.documentElement;
  10. var lang = html.attributes["lang"]
  11. var isZh = true;
  12. if(lang != null && lang.nodeValue =="en-US" ){
  13. console.log("the language is " + lang.nodeValue);
  14. isZh=false;
  15. }else{
  16. console.log("default lang=zh");
  17. }
  18. function isEmpty(str){
  19. if(typeof str == "undefined" || str == null || str == ""){
  20. return true;
  21. }
  22. return false;
  23. }
  24. var itemType={
  25. "1":"repository",
  26. "2":"issue",
  27. "3":"user",
  28. "4":"org",
  29. "5":"dataset",
  30. "6":"pr"
  31. };
  32. var sortBy={
  33. "10":"default",
  34. "11":"updated_unix.keyword",
  35. "12":"num_watches",
  36. "13":"num_stars",
  37. "14":"num_forks",
  38. "20":"default",
  39. "21":"updated_unix.keyword",
  40. "30":"default",
  41. "31":"name.keyword",
  42. "32":"name.keyword",
  43. "33":"created_unix.keyword",
  44. "34":"created_unix.keyword",
  45. "40":"default",
  46. "41":"name.keyword",
  47. "42":"name.keyword",
  48. "43":"created_unix.keyword",
  49. "44":"created_unix.keyword",
  50. "50":"default",
  51. "51":"download_times.keyword",
  52. "60":"default",
  53. "61":"updated_unix.keyword"
  54. };
  55. var sortAscending={
  56. "10":"false",
  57. "11":"false",
  58. "12":"false",
  59. "13":"false",
  60. "14":"false",
  61. "20":"false",
  62. "21":"false",
  63. "30":"false",
  64. "31":"true",
  65. "32":"false",
  66. "33":"false",
  67. "34":"true",
  68. "40":"false",
  69. "41":"true",
  70. "42":"false",
  71. "43":"false",
  72. "44":"true",
  73. "50":"false",
  74. "51":"false",
  75. "60":"false",
  76. "61":"false"
  77. };
  78. var currentPage = 1;
  79. var pageSize = 15;
  80. var currentSearchTableName ="repository";
  81. var currentSearchKeyword="";
  82. var currentSearchSortBy="";
  83. var currentSearchAscending=false;
  84. var OnlySearchLabel=false;
  85. var startIndex =1;
  86. var endIndex = 5;
  87. var totalPage = 1;
  88. var totalNum = 0;
  89. var privateTotal = 0;
  90. function initPageInfo(){
  91. currentPage = 1;
  92. startIndex =1;
  93. endIndex = 5;
  94. }
  95. function searchItem(type,sortType){
  96. console.log("enter item 2.");
  97. currentSearchKeyword = document.getElementById("keyword_input").value;
  98. if(!isEmpty(currentSearchKeyword)){
  99. initPageInfo();
  100. currentSearchTableName = itemType[type];
  101. currentSearchSortBy = sortBy[sortType];
  102. currentSearchAscending = sortAscending[sortType];
  103. OnlySearchLabel =false;
  104. page(currentPage);
  105. }
  106. }
  107. function search(){
  108. console.log("enter here 1.");
  109. currentSearchKeyword = document.getElementById("keyword_input").value;
  110. initPageInfo();
  111. if(!isEmpty(currentSearchKeyword)){
  112. currentSearchSortBy = sortBy[10];
  113. currentSearchAscending = false;
  114. OnlySearchLabel =false;
  115. page(currentPage);
  116. if(currentSearchTableName != "repository"){
  117. doSearch("repository",currentSearchKeyword,1,pageSize,true,"",false);
  118. }
  119. if(currentSearchTableName != "issue"){
  120. doSearch("issue",currentSearchKeyword,1,pageSize,true,"",false);
  121. }
  122. if(currentSearchTableName != "user"){
  123. doSearch("user",currentSearchKeyword,1,pageSize,true,"",false);
  124. }
  125. if(currentSearchTableName != "org"){
  126. doSearch("org",currentSearchKeyword,1,pageSize,true,"",false);
  127. }
  128. if(currentSearchTableName != "dataset"){
  129. doSearch("dataset",currentSearchKeyword,1,pageSize,true,"",false);
  130. }
  131. if(currentSearchTableName != "pr"){
  132. doSearch("pr",currentSearchKeyword,1,pageSize,true,"",false);
  133. }
  134. }
  135. }
  136. function initDiv(isSearchLabel=false){
  137. if(isSearchLabel){
  138. document.getElementById("search_div").style.display="none";
  139. document.getElementById("search_label_div").style.display="block";
  140. document.getElementById("dataset_item").style.display="none";
  141. document.getElementById("issue_item").style.display="none";
  142. document.getElementById("pr_item").style.display="none";
  143. document.getElementById("user_item").style.display="none";
  144. document.getElementById("org_item").style.display="none";
  145. document.getElementById("find_id").innerHTML="";
  146. }else{
  147. document.getElementById("search_div").style.display="block";
  148. document.getElementById("search_label_div").style.display="none";
  149. document.getElementById("dataset_item").style.display="block";
  150. document.getElementById("issue_item").style.display="block";
  151. document.getElementById("pr_item").style.display="block";
  152. document.getElementById("user_item").style.display="block";
  153. document.getElementById("org_item").style.display="block";
  154. document.getElementById("find_id").innerHTML="找到";
  155. }
  156. }
  157. function searchLabel(tableName,keyword,sortBy="",ascending=false){
  158. console.log("enter label search.");
  159. initDiv(true);
  160. //document.getElementById("search_div").style.display="none";
  161. //document.getElementById("search_label_div").style.display="block";
  162. document.getElementById("search_label_div").innerHTML="<p class=\"searchlabel\">#" + keyword + "</p>";
  163. currentSearchKeyword = keyword;
  164. initPageInfo();
  165. currentSearchTableName = tableName;
  166. currentSearchSortBy = sortBy;
  167. currentSearchAscending = ascending;
  168. OnlySearchLabel =true;
  169. page(currentPage);
  170. }
  171. function doSearch(tableName,keyword,page,pageSize=15,onlyReturnNum=true,sortBy="",OnlySearchLabel=false){
  172. $.ajax({
  173. type:"GET",
  174. url:"/all/dosearch/",
  175. headers: {
  176. authorization:token,
  177. },
  178. dataType:"json",
  179. data:{
  180. 'TableName': tableName,
  181. 'Key': keyword,
  182. 'Page': page,
  183. 'PageSize': pageSize,
  184. 'OnlyReturnNum':onlyReturnNum,
  185. 'SortBy':sortBy,
  186. 'OnlySearchLabel':OnlySearchLabel,
  187. 'Ascending':currentSearchAscending,
  188. 'WebTotal':totalNum,
  189. 'PrivateTotal':privateTotal
  190. },
  191. async:true,
  192. success:function(json){
  193. console.log("tableName=" + tableName);
  194. console.log(json);
  195. displayResult(tableName,page,json,onlyReturnNum,keyword);
  196. },
  197. error:function(response) {
  198. console.log(response);
  199. }
  200. });
  201. }
  202. function displayResult(tableName,page,jsonResult,onlyReturnNum,keyword){
  203. if(tableName == "repository") {
  204. displayRepoResult(page,jsonResult,onlyReturnNum,keyword);
  205. } else if (tableName == "issue") {
  206. displayIssueResult(page,jsonResult,onlyReturnNum,keyword);
  207. } else if (tableName == "user") {
  208. displayUserResult(page,jsonResult,onlyReturnNum,keyword);
  209. } else if (tableName == "org") {
  210. displayOrgResult(page,jsonResult,onlyReturnNum,keyword);
  211. } else if (tableName == "dataset") {
  212. displayDataSetResult(page,jsonResult,onlyReturnNum,keyword);
  213. } else if (tableName == "pr") {
  214. displayPrResult(page,jsonResult,onlyReturnNum,keyword);
  215. }
  216. if(!onlyReturnNum){
  217. console.log("set total num." + tableName);
  218. totalPage =Math.ceil(jsonResult.Total/pageSize);
  219. totalNum = jsonResult.Total;
  220. privateTotal = jsonResult.PrivateTotal;
  221. setPage(page);
  222. }
  223. }
  224. function displayPrResult(page,jsonResult,onlyReturnNum,keyword){
  225. var data = jsonResult.Result;
  226. var total = jsonResult.Total;
  227. $('#pr_total').text(total);
  228. if(!onlyReturnNum){
  229. setActivate("pr_item");
  230. $('#keyword_desc').text(keyword);
  231. $('#obj_desc').text("合并请求");
  232. $('#child_total').text(total);
  233. setIssueOrPrInnerHtml(data,"pulls");
  234. }
  235. }
  236. var categoryDesc={
  237. "computer_vision":"计算机视觉",
  238. "natural_language_processing":"自然语言处理",
  239. "speech_processing":"语音处理",
  240. "computer_vision_natural_language_processing":"计算机视觉、自然语言处理"
  241. };
  242. var taskDesc={
  243. "machine_translation":"机器翻译",
  244. "question_answering_system":"问答系统",
  245. "information_retrieval":"信息检索",
  246. "knowledge_graph":"知识图谱",
  247. "text_annotation":"文本标注",
  248. "text_categorization":"文本分类",
  249. "emotion_analysis":"情感分析",
  250. "language_modeling":"语言建模",
  251. "speech_recognition":"语音识别",
  252. "automatic_digest":"自动文摘",
  253. "information_extraction":"信息抽取",
  254. "description_generation":"说明生成",
  255. "image_classification":"图像分类",
  256. "face_recognition":"人脸识别",
  257. "image_search":"图像搜索",
  258. "target_detection":"目标检测",
  259. "image_description_generation":"图像描述生成",
  260. "vehicle_license_plate_recognition":"车辆车牌识别",
  261. "medical_image_analysis":"医学图像分析",
  262. "unmanned":"无人驾驶",
  263. "unmanned_security":"无人安防",
  264. "drone":"无人机",
  265. "vr_ar":"VR/AR",
  266. "2_d_vision":"2-D视觉",
  267. "2_5_d_vision":"2.5-D视觉",
  268. "3_d_reconstruction":"3D重构",
  269. "image_processing":"图像处理",
  270. "video_processing":"视频处理",
  271. "visual_input_system":"视觉输入系统",
  272. "speech_coding":"语音编码",
  273. "speech_enhancement":"语音增强",
  274. "speech_recognition":"语音识别",
  275. "speech_synthesis":"语音合成"
  276. };
  277. function getCategoryDesc(key){
  278. var re = categoryDesc[key];
  279. if(isEmpty(re)){
  280. return key;
  281. }
  282. return re;
  283. }
  284. function getTaskDesc(key){
  285. var re = taskDesc[key];
  286. if(isEmpty(re)){
  287. return key;
  288. }
  289. return re;
  290. }
  291. function displayDataSetResult(page,jsonResult,onlyReturnNum,keyword){
  292. var data = jsonResult.Result;
  293. var total = jsonResult.Total;
  294. $('#dataset_total').text(total);
  295. if(!onlyReturnNum){
  296. setActivate("dataset_item");
  297. $('#keyword_desc').text(keyword);
  298. $('#obj_desc').text("数据集");
  299. $('#child_total').text(total);
  300. var sortHtml = "";
  301. sortHtml +="<a class=\"item\" href=\"javascript:searchItem(5,50);\" tabindex=\"-1\" role=\"menuitem\" id=\"menuitem_1\">最佳匹配</a>";
  302. sortHtml +="<a class=\"item\" href=\"javascript:searchItem(5,51);\" tabindex=\"-1\" role=\"menuitem\" id=\"menuitem_1\">下载次数</a>";
  303. document.getElementById("sort_type").innerHTML=sortHtml;
  304. var html = "";
  305. var currentTime = new Date().getTime();
  306. for(var i = 0; i < data.length;i++){
  307. var recordMap = data[i];
  308. html += "<div class=\"item\">";
  309. html += " <div class=\"content\">";
  310. html += " <div class=\"ui right metas\">" ;
  311. if(!isEmpty(recordMap["category"])){
  312. html += " <span class=\"text grey\"><svg class=\"svg octicon-tasklist\" width=\"16\" height=\"16\" aria-hidden=\"true\"><use xlink:href=\"#octicon-tasklist\" /></svg> " + getCategoryDesc(recordMap["category"]) + "</span>";
  313. }
  314. if(!isEmpty(recordMap["task"])){
  315. html += " <span class=\"text grey\"><svg class=\"svg octicon-tag\" width=\"16\" height=\"16\" aria-hidden=\"true\"><use xlink:href=\"#octicon-tag\" /></svg>" + getTaskDesc(recordMap["task"]) + "</span>";
  316. }
  317. html += " <span class=\"text grey\"><i class=\"ri-fire-line\"></i> " +recordMap["download_times"] + "</span> ";
  318. html +=" </div>";
  319. html += " <div class=\"ui header\">";
  320. html += " <a class=\"name\" href=\"/" +recordMap["repoUrl"] +"/datasets?type=0\">" + recordMap["title"] + "</a>";
  321. html +=" <span class=\"middle\"><svg class=\"svg octicon-repo-clone\" width=\"16\" height=\"16\" aria-hidden=\"true\"><use xlink:href=\"#octicon-repo-clone\"></use></svg></span>";
  322. html +=" </div>";
  323. html += " <div class=\"description\">";
  324. html += " <p class=\"has-emoji\"> " + recordMap["description"] + "</p>";
  325. if(!isEmpty(recordMap["file_name"])){
  326. html += " <p class=\"has-emoji\"> " + recordMap["file_name"] + "</p>";
  327. }
  328. html +=" <p class=\"time\">";
  329. html +=" <span class=\"am-ml-10\"></span> 最后更新于 " + recordMap["updated_html"];
  330. html +=" </p>";
  331. html +=" </div>";
  332. html +=" </div>";
  333. html +="</div>";
  334. }
  335. document.getElementById("child_search_item").innerHTML=html;
  336. }
  337. }
  338. function displayOrgResult(page,jsonResult,onlyReturnNum,keyword){
  339. var data = jsonResult.Result;
  340. var total = jsonResult.Total;
  341. $('#org_total').text(total);
  342. if(!onlyReturnNum){
  343. setActivate("org_item");
  344. $('#keyword_desc').text(keyword);
  345. $('#obj_desc').text("组织");
  346. $('#child_total').text(total);
  347. var sortHtml = "";
  348. sortHtml +="<a class=\"item\" href=\"javascript:searchItem(4,40);\" tabindex=\"-1\" role=\"menuitem\" id=\"menuitem_1\">最佳匹配</a>";
  349. sortHtml +="<a class=\"item\" href=\"javascript:searchItem(4,41);\" tabindex=\"-1\" role=\"menuitem\" id=\"menuitem_1\">字母顺序排序</a>";
  350. sortHtml +="<a class=\"item\" href=\"javascript:searchItem(4,42);\" tabindex=\"-1\" role=\"menuitem\" id=\"menuitem_2\">字母逆序排序</a>";
  351. sortHtml +="<a class=\"item\" href=\"javascript:searchItem(4,43);\" tabindex=\"-1\" role=\"menuitem\" id=\"menuitem_2\">最近创建</a>";
  352. sortHtml +="<a class=\"item\" href=\"javascript:searchItem(4,44);\" tabindex=\"-1\" role=\"menuitem\" id=\"menuitem_2\">最早创建</a>";
  353. document.getElementById("sort_type").innerHTML=sortHtml;
  354. var html = "";
  355. var currentTime = new Date().getTime();
  356. for(var i = 0; i < data.length;i++){
  357. var recordMap = data[i];
  358. html += "<div class=\"item members\">";
  359. html += "<img class=\"ui avatar image\" src=\"" + recordMap["avatar"] + "\"></img>";
  360. html += " <div class=\"content\">";
  361. html += " <div class=\"ui header\">";
  362. html += " <a class=\"name\" href=\"/" + recordMap["real_name"] +"\">" + recordMap["name"] + "&nbsp;&nbsp;" + recordMap["full_name"] + "</a>";
  363. html +=" </div>";
  364. html += " <div class=\"description\">";
  365. html += " <p class=\"has-emoji\"> " + recordMap["description"] + "</p>";
  366. html +=" <p class=\"has-emoji\">";
  367. if(!isEmpty(recordMap["location"]) && recordMap["location"] != "null"){
  368. html +=" <i class=\"ri-map-pin-2-line\"></i> " + recordMap["location"];
  369. }
  370. html +=" <span class=\"am-ml-10\"></span>";
  371. if(!isEmpty(recordMap["website"]) && recordMap["website"] != "null"){
  372. html +=" <i class=\"ri-links-line\"></i>" + "<a href=\""+ recordMap["website"] + "\" target=\"_blank\">" + recordMap["website"] + "</a>";
  373. }
  374. html +=" <i class=\"ri-time-line am-ml-10\"></i> 加入于 ";
  375. html += recordMap["add_time"]
  376. html +=" </p>";
  377. html +=" </div>";
  378. html +=" </div>";
  379. html +="</div>";
  380. }
  381. document.getElementById("child_search_item").innerHTML=html;
  382. }
  383. }
  384. var monthDisplay=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Spt","Oct","Nov","Dec");
  385. function displayUserResult(page,jsonResult,onlyReturnNum,keyword){
  386. var data = jsonResult.Result;
  387. var total = jsonResult.Total;
  388. $('#user_total').text(total);
  389. if(!onlyReturnNum){
  390. setActivate("user_item");
  391. $('#keyword_desc').text(keyword);
  392. $('#obj_desc').text("用户");
  393. $('#child_total').text(total);
  394. var sortHtml = "";//equal user sort by
  395. sortHtml +="<a class=\"item\" href=\"javascript:searchItem(3,30);\" tabindex=\"-1\" role=\"menuitem\" id=\"menuitem_1\">最佳匹配</a>";
  396. sortHtml +="<a class=\"item\" href=\"javascript:searchItem(3,31);\" tabindex=\"-1\" role=\"menuitem\" id=\"menuitem_1\">字母顺序排序</a>";
  397. sortHtml +="<a class=\"item\" href=\"javascript:searchItem(3,32);\" tabindex=\"-1\" role=\"menuitem\" id=\"menuitem_2\">字母逆序排序</a>";
  398. sortHtml +="<a class=\"item\" href=\"javascript:searchItem(3,33);\" tabindex=\"-1\" role=\"menuitem\" id=\"menuitem_2\">最近创建</a>";
  399. sortHtml +="<a class=\"item\" href=\"javascript:searchItem(3,34);\" tabindex=\"-1\" role=\"menuitem\" id=\"menuitem_2\">最早创建</a>";
  400. document.getElementById("sort_type").innerHTML=sortHtml;
  401. var html = "";
  402. var currentTime = new Date().getTime();
  403. for(var i = 0; i < data.length;i++){
  404. var recordMap = data[i];
  405. html += "<div class=\"item members\">";
  406. html += "<img class=\"ui avatar image\" src=\"" + recordMap["avatar"] + "\"></img>";
  407. html += " <div class=\"content\">";
  408. html += " <div class=\"ui header\">";
  409. html += " <a class=\"name\" href=\"/" + recordMap["real_name"] +"\">" + recordMap["name"] + "&nbsp;&nbsp;" + recordMap["full_name"] + "</a>";
  410. html +=" </div>";
  411. html += " <div class=\"description\">";
  412. html += " <p class=\"has-emoji\"> " + recordMap["description"] + "</p>";
  413. html +=" <p class=\"has-emoji\">";
  414. if(!isEmpty(recordMap["email"]) && recordMap["email"] != "null"){
  415. html +=" <i class=\"ri-mail-line\"></i>" + recordMap["email"];
  416. }
  417. html +=" <i class=\"ri-time-line am-ml-10\"></i> 加入于 ";
  418. html += recordMap["add_time"]
  419. html +=" </p>";
  420. html +=" </div>";
  421. html +=" </div>";
  422. html +="</div>";
  423. }
  424. document.getElementById("child_search_item").innerHTML=html;
  425. }
  426. }
  427. function setIssueOrPrInnerHtml(data,path){
  428. var sortHtml = "";
  429. if(path =="issues"){
  430. sortHtml +="<a class=\"item\" href=\"javascript:searchItem(2,20);\" tabindex=\"-1\" role=\"menuitem\" id=\"menuitem_1\">最佳匹配</a>";
  431. sortHtml +="<a class=\"item\" href=\"javascript:searchItem(2,21);\" tabindex=\"-1\" role=\"menuitem\" id=\"menuitem_1\">最近更新</a>";
  432. }else{
  433. sortHtml +="<a class=\"item\" href=\"javascript:searchItem(6,60);\" tabindex=\"-1\" role=\"menuitem\" id=\"menuitem_1\">最佳匹配</a>";
  434. sortHtml +="<a class=\"item\" href=\"javascript:searchItem(6,61);\" tabindex=\"-1\" role=\"menuitem\" id=\"menuitem_1\">最近更新</a>";
  435. }
  436. document.getElementById("sort_type").innerHTML=sortHtml;
  437. var html = "";
  438. var currentTime = new Date().getTime();
  439. for(var i = 0; i < data.length;i++){
  440. var recordMap = data[i];
  441. html += "<div class=\"item\">";
  442. html += " <div class=\"content\">";
  443. html += " <div class=\"ui header\">";
  444. html += " <a class=\"name\" href=\"/" + recordMap["repoUrl"] +"/" + path + "/" + recordMap["index"] + "\">" + recordMap["name"] + "</a>";
  445. html +=" </div>";
  446. html += " <div class=\"description\">";
  447. html += " <p class=\"has-emoji\"> " + recordMap["content"] + "</p>";
  448. html +=" <p class=\"time\">";
  449. html +=" <i class=\"ri-code-box-line\"></i>";
  450. html +=" <a class=\"am-text grey\" href=\"/" + recordMap["repoUrl"] +"/" + path + "/" + recordMap["index"] + "\"> " + recordMap["repoUrl"] +"#" + recordMap["index"] + "</a>&nbsp;&nbsp;&nbsp;&nbsp;";
  451. html +=" <i class=\"ri-information-line am-ml-10\"></i> ";
  452. if(recordMap["is_closed"] != null && (!(recordMap["is_closed"]) || recordMap["is_closed"]=="f")){
  453. html += "开启中";
  454. }else{
  455. html += "已关闭";
  456. }
  457. html +=" &nbsp;&nbsp;&nbsp;&nbsp;<i class=\"ri-message-2-line am-ml-10\"></i> " + recordMap["num_comments"];
  458. html +=" <span class=\"am-ml-10\">&nbsp;&nbsp;</span>&nbsp;&nbsp;最后更新于 "+ recordMap["updated_html"];
  459. html +=" </p>";
  460. html +=" </div>";
  461. html +=" </div>";
  462. html +="</div>";
  463. }
  464. document.getElementById("child_search_item").innerHTML=html;
  465. }
  466. function displayIssueResult(page,jsonResult,onlyReturnNum,keyword){
  467. var data = jsonResult.Result;
  468. var total = jsonResult.Total;
  469. $('#issue_total').text(total);
  470. if(!onlyReturnNum){
  471. setActivate("issue_item");
  472. $('#keyword_desc').text(keyword);
  473. $('#obj_desc').text("任务");
  474. $('#child_total').text(total);
  475. setIssueOrPrInnerHtml(data,"issues");
  476. }
  477. }
  478. function setActivate(name){
  479. $('#repo_item').removeClass("active");
  480. $('#user_item').removeClass("active");
  481. $('#issue_item').removeClass("active");
  482. $('#dataset_item').removeClass("active");
  483. $('#org_item').removeClass("active");
  484. $('#pr_item').removeClass("active");
  485. var tmp = "#" + name;
  486. $(tmp).addClass("active");
  487. }
  488. function displayRepoResult(page,jsonResult,onlyReturnNum,keyword){
  489. var data = jsonResult.Result;
  490. var total = jsonResult.Total;
  491. $('#repo_total').text(total);
  492. if(!onlyReturnNum){
  493. setActivate("repo_item");
  494. $('#keyword_desc').text(keyword);
  495. $('#obj_desc').text("项目");
  496. $('#child_total').text(total);
  497. var sortHtml = "";
  498. sortHtml +="<a class=\"item\" href=\"javascript:searchItem(1,10);\" tabindex=\"-1\" role=\"menuitem\" id=\"menuitem_1\">最佳匹配</a>";
  499. sortHtml +="<a class=\"item\" href=\"javascript:searchItem(1,11);\" tabindex=\"-1\" role=\"menuitem\" id=\"menuitem_1\">最近更新</a>";
  500. sortHtml +="<a class=\"item\" href=\"javascript:searchItem(1,12);\" tabindex=\"-1\" role=\"menuitem\" id=\"menuitem_1\">关注数</a>";
  501. sortHtml +="<a class=\"item\" href=\"javascript:searchItem(1,13);\" tabindex=\"-1\" role=\"menuitem\" id=\"menuitem_1\">点赞数</a>";
  502. sortHtml +="<a class=\"item\" href=\"javascript:searchItem(1,14);\" tabindex=\"-1\" role=\"menuitem\" id=\"menuitem_1\">Fork数</a>";
  503. document.getElementById("sort_type").innerHTML=sortHtml;
  504. var html = "";
  505. var currentTime = new Date().getTime();
  506. for(var i = 0; i < data.length;i++){
  507. var recordMap = data[i];
  508. html += "<div class=\"item\">";
  509. if(!isEmpty(recordMap['avatar'])){
  510. html += "<img class=\"ui avatar image\" src=\"" + recordMap['avatar'] + "\">";
  511. }
  512. html += " <div class=\"content\">";
  513. html += " <div class=\"ui header\">";
  514. html += " <a class=\"name\" href=\"/" + recordMap["owner_name"] + "/" + recordMap["real_name"] +"\"> <span>" + recordMap["owner_name"] +"</span> <span>/</span> <strong>" + recordMap["alias"] + "</strong></a>";
  515. if(recordMap["is_private"]){
  516. html +=" <span class=\"middle text gold\"><svg class=\"svg octicon-lock\" width=\"16\" height=\"16\" aria-hidden=\"true\"><use xlink:href=\"#octicon-lock\" /></svg></span>";
  517. }
  518. html +=" </div>";
  519. html += " <div class=\"description\">";
  520. html += " <p class=\"has-emoji\"> " + recordMap["description"] + "</p>";
  521. html += " <div class=\"ui tags\">";
  522. if(!isEmpty(recordMap["topics"]) && recordMap["topics"] !="null"){
  523. for(var j = 0; j < recordMap["topics"].length;j++){
  524. //function searchLabel(tableName,keyword,sortBy="",ascending=false)
  525. html +=" <a href=\"javascript:searchLabel('repository','" + recordMap["topics"][j] + "','updated_unix.keyword',false);\"><div class=\"ui small label topic\">"+ recordMap["hightTopics"][j] + "</div></a>";
  526. }
  527. }
  528. html +=" </div>";
  529. html +=" <p class=\"time\">";
  530. html +=" <i class=\"icon fa-eye\">" +recordMap["num_watches"] + "</i>&nbsp;&nbsp;<i class=\"ri-star-line\"></i>" + recordMap["num_stars"] + "&nbsp;&nbsp;<i class=\"ri-git-branch-line am-ml-10\"></i>" + recordMap["num_forks"] +"&nbsp;&nbsp;";
  531. html +="&nbsp;&nbsp;&nbsp;&nbsp;最后更新于 " + recordMap["updated_html"];
  532. if(!isEmpty(recordMap["lang"])){
  533. var lang = recordMap["lang"]
  534. var tmpLang = recordMap["lang"].split(",");
  535. if(tmpLang.length>0){
  536. lang = tmpLang[0]
  537. }
  538. html +=" <span class=\"text grey am-ml-10\"><i class=\"color-icon\" style=\"background-color: #3572A5\"></i>" + lang + "</span>";
  539. }
  540. html +=" </p>";
  541. html +=" </div>";
  542. html +=" </div>";
  543. html +="</div>";
  544. }
  545. document.getElementById("child_search_item").innerHTML=html;
  546. }
  547. }
  548. function getTime(UpdatedUnix,currentTime){
  549. UpdatedUnix = UpdatedUnix;
  550. currentTime = currentTime / 1000;
  551. var timeEscSecond = currentTime - UpdatedUnix;
  552. if( timeEscSecond < 0){
  553. timeEscSecond = 1;
  554. }
  555. console.log("currentTime=" + currentTime + " updateUnix=" + UpdatedUnix);
  556. var hours= Math.floor(timeEscSecond / 3600);
  557. //计算相差分钟数
  558. var leave2 = Math.floor(timeEscSecond % (3600)); //计算小时数后剩余的秒数
  559. var minutes= Math.floor(leave2 / 60);//计算相差分钟数
  560. var leave3=Math.floor(leave2 % 60); //计算分钟数后剩余的秒数
  561. var seconds= leave3;
  562. if(hours == 0 && minutes == 0){
  563. return seconds + getRepoOrOrg(6,isZh);
  564. }else{
  565. if(hours > 0){
  566. if(hours >= 24){
  567. var days = Math.ceil(hours/24)
  568. if (days >= 30 && days <365){
  569. return Math.ceil(days/30) + getRepoOrOrg(8,isZh);
  570. }else if(days >= 365){
  571. return Math.ceil(days/365) + getRepoOrOrg(9,isZh);
  572. }
  573. return Math.ceil(hours/24) + getRepoOrOrg(7,isZh);
  574. }else{
  575. return hours + getRepoOrOrg(4,isZh);
  576. }
  577. }else{
  578. return minutes + getRepoOrOrg(5,isZh);
  579. }
  580. }
  581. }
  582. function getRepoOrOrg(key,isZhLang){
  583. if(isZhLang){
  584. return repoAndOrgZH[key];
  585. }else{
  586. return repoAndOrgEN[key];
  587. }
  588. }
  589. var repoAndOrgZH={
  590. "1":"项目",
  591. "2":"成员",
  592. "3":"团队",
  593. "4":"小时前",
  594. "5":"分钟前",
  595. "6":"秒前",
  596. "7":"天前",
  597. "8":"个月前",
  598. "9":"年前"
  599. };
  600. var repoAndOrgEN={
  601. "1":"repository",
  602. "2":"Members ",
  603. "3":"Teams",
  604. "4":" hours ago",
  605. "5":" minutes ago",
  606. "6":" seconds ago",
  607. "7":" day ago",
  608. "8":" month ago",
  609. "9":" year ago"
  610. };
  611. function page(current){
  612. currentPage=current;
  613. doSearch(currentSearchTableName,currentSearchKeyword,current,pageSize,false,currentSearchSortBy,OnlySearchLabel);
  614. }
  615. function nextPage(){
  616. currentPage = currentPage+1;
  617. console.log("currentPage=" + currentPage);
  618. if(currentPage >= endIndex){
  619. startIndex=startIndex+1;
  620. endIndex = endIndex +1;
  621. }
  622. page(currentPage);
  623. }
  624. function prePage(){
  625. console.log("currentPage=" + currentPage);
  626. if(currentPage > 1){
  627. currentPage = currentPage-1;
  628. if(currentPage <= startIndex && startIndex > 1){
  629. startIndex = startIndex -1;
  630. endIndex = endIndex - 1;
  631. }
  632. console.log("currentPage=" + (currentPage));
  633. page(currentPage);
  634. }
  635. }
  636. function getXPosition(e){
  637. var x=e.offsetLeft;
  638. while(e=e.offsetParent)
  639. {
  640. x+=e.offsetLeft;
  641. }
  642. return x+20;//-260防止屏幕超出
  643. }
  644. //获取y坐标
  645. function getYPosition(e){
  646. var y=e.offsetTop;
  647. while(e=e.offsetParent)
  648. {
  649. y+=e.offsetTop;
  650. }
  651. return y+20;//80为input高度
  652. }
  653. function goPage(event){
  654. var inputpage = document.getElementById("inputpage_div")
  655. var left = getXPosition(event.target);
  656. var top = getYPosition(event.target);
  657. var goNum = $('#inputpage').val();
  658. if (goNum<=0){
  659. showTip("请输入大于0的数值。","warning",left+5,top);
  660. }
  661. else if(goNum<=totalPage){
  662. page(goNum);
  663. }
  664. else{
  665. showTip("不能超出总页数。","warning",left+5,top);
  666. }
  667. }
  668. function showTip(tip, type,left,top) {
  669. var $tip = $('#tipmsg');
  670. var tipmsg = document.getElementById("tipmsg")
  671. var style="z-index:10024;top:" + top + "px;left:" + left + "px;position:absolute;width:200px;height:60px;vertical-align:middle;";
  672. console.log(style);
  673. tipmsg.style = style;
  674. var html ="<p>" + tip + "</p>"
  675. $tip.stop(true).prop('class', 'alert alert-' + type).html(html).fadeIn(500).delay(2000).fadeOut(500);
  676. }
  677. function setPage(currentPage){
  678. console.log("totalPage=" + totalPage);
  679. var html ="";
  680. console.log("currentPage=" + currentPage);
  681. console.log("privateTotal=" + privateTotal);
  682. // if(totalPage==0){
  683. // return;
  684. // }
  685. html += "<span class=\"item\">共 " + totalNum + " 条</span>"
  686. if(currentPage > 1){
  687. html += "<a class=\"item navigation\" href=\"javascript:page(1)\"><span class=\"navigation_label\">首页</span></a>";
  688. html += "<a class=\"item navigation\" href=\"javascript:prePage()\"><i class=\"left arrow icon\"></i></a>";
  689. }else{
  690. html += "<a class=\"disabled item navigation\" href=\"javascript:page(1)\"><span class=\"navigation_label\">首页</span></a>";
  691. html += "<a class=\"disabled item navigation\" href=\"javascript:prePage()\"><i class=\"left arrow icon\"></i></a>";
  692. }
  693. for(var i=startIndex; i <= endIndex; i++){
  694. var page_i = i;
  695. if(page_i > totalPage){
  696. break;
  697. }
  698. if( page_i == currentPage){
  699. html += "<a id=\"page_" + page_i+ "\" class=\"active item\" href=\"javascript:page(" + page_i +")\">" + page_i + "</a>";
  700. }else{
  701. html += "<a id=\"page_" + page_i+ "\" class=\"item\" href=\"javascript:page(" + page_i +")\">" + page_i + "</a>";
  702. }
  703. }
  704. if(currentPage >=totalPage){
  705. html += "<a class=\"disabled item navigation\" href=\"javascript:nextPage()\"><i class=\"icon right arrow\"></i></a>";
  706. html += "<a class=\"disabled item navigation\" href=\"javascript:page(" + totalPage + ")\"><span class=\"navigation_label\">末页</span></a>";
  707. }else{
  708. html += "<a class=\"item navigation\" href=\"javascript:nextPage()\"><i class=\"icon right arrow\"></i></a>";
  709. html += "<a class=\"item navigation\" href=\"javascript:page(" + totalPage + ")\"><span class=\"navigation_label\">末页</span></a>";
  710. }
  711. html +="<div class=\"item\"> 前往<div id=\"inputpage_div\" class=\"ui input\"><input id=\"inputpage\" type=\"text\"></div>页</div>";
  712. console.log("html=" + html)
  713. document.getElementById("page_menu").innerHTML=html;
  714. $('#inputpage').on('keypress',function(event){
  715. if(event.keyCode == 13){
  716. goPage(event);
  717. }
  718. });
  719. }
  720. $('#keyword_input').on('keypress',function(event){
  721. if(event.keyCode == 13){
  722. var keyword = $('#keyword_input').val();
  723. if(!isEmpty(keyword)){
  724. search();
  725. }
  726. }
  727. });
  728. initDiv(false);
  729. document.onreadystatechange = function() {
  730. if (document.readyState === "complete") {
  731. var keyword = $('#keyword_input').val();
  732. if(!isEmpty(keyword)){
  733. search();
  734. }
  735. }
  736. }