百度搜索 - 优化

1、屏蔽百度推广 2、居中单列(可选) 3、居中双列(可选) 4.自动下一页(可选)

安装此脚本?
作者推荐脚本

您可能也喜欢谷歌搜索 - 优化

安装此脚本
  1. // ==UserScript==
  2. // @name 百度搜索 - 优化
  3. // @namespace http://tampermonkey.net/
  4. // @home-url https://gf.qytechs.cn/zh-CN/scripts/31642
  5. // @description 1、屏蔽百度推广 2、居中单列(可选) 3、居中双列(可选) 4.自动下一页(可选)
  6. // @version 5.1.1
  7. // @author 浮生未歇
  8. // @run-at document-start
  9. // @match *://ipv6.baidu.com/*
  10. // @match *://www.baidu.com/
  11. // @match *://www.baidu.com/?*
  12. // @match *://www.baidu.com/s?*
  13. // @match *://www.baidu.com/#*
  14. // @match *://www.baidu.com/baidu?*
  15. // @exclude ^https://www.baidu.com/home*
  16. // @exclude ^https://www.baidu.com/sf*
  17. // @exclude ^https://www.baidu.com/search*
  18. // @exclude ^https://www.baidu.com/link*
  19. // @exclude ^https://www.baidu.com/s*tn=news*
  20. // @require https://lib.baomitu.com/jquery/3.5.0/jquery.min.js
  21. // @connect self
  22. // @connect baidu.com
  23. // @connect bing.com
  24. // @grant GM_addStyle
  25. // @grant GM_getResourceText
  26. // @grant GM_getResourceURL
  27. // @grant GM_setValue
  28. // @grant GM_getValue
  29. // @grant GM_deleteValue
  30. // @grant GM_xmlhttpRequest
  31. // ==/UserScript==
  32.  
  33.  
  34. (function () {
  35. const UserConfig = {
  36. BG_IMAGE_URL: "",
  37. };
  38. const SYSTEM_CONFIGS = {
  39. IS_DEBUG: false,
  40. PAGE_SELECT_NAME: "BD_PAGE_SELECT",
  41. PAGE_AUTO_NEXT_PAGE_NAME: "IS_AUTO_NEXT_PAGE",
  42. DEFAULT_PAGE_SELECT_VALUE: 1,
  43. DEFAULT_AUTO_NEXT_PAGE_SWITCH: false,
  44. BAIDU_STYLES: {
  45. INDEX: "baiduIndexStyle",
  46. BASE: "baiduBaseStyle",
  47. MENU: "baiduMenu",
  48. ONE_PAGE: "baiduOne",
  49. TWO_PAGE: "baiduTwo",
  50. THREE_PAGE: "baiduThree"
  51. },
  52. };
  53. const SIDEBAR_TOOLBAR_ITEMS = {
  54. "百度识图": "https://graph.baidu.com/pcpage/index?tpl_from=pc",
  55. "百度资讯": "https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&ie=utf-8&word=%s",
  56. "百度文库": "https://wenku.baidu.com/search?lm=0&od=0&ie=utf-8&word=%s",
  57. "百度知道": "https://zhidao.baidu.com/search?ct=17&pn=0&tn=ikaslist&rn=10&fr=wenku&word=%s",
  58. "百度贴吧": "https://tieba.baidu.com/f?kw=%s&t=4",
  59. "百度图片": "https://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&word=%s&t=3",
  60. "百度地图": "https://map.baidu.com/",
  61. "Google": "https://www.google.com/search?&num=20&newwindow=1&q=%s",
  62. "Bing": "https://www.bing.com/search?q=%s",
  63. "淘宝": "https://s.taobao.com/search?q=%s",
  64. "京东": "https://search.jd.com/Search?keyword=%s&enc=utf-8"
  65. };
  66. let LAYOUT_TYPE;
  67. (function (LAYOUT_TYPE) {
  68. LAYOUT_TYPE[LAYOUT_TYPE["General"] = 0] = "General";
  69. LAYOUT_TYPE[LAYOUT_TYPE["OneCenter"] = 1] = "OneCenter";
  70. LAYOUT_TYPE[LAYOUT_TYPE["TwoCenter"] = 2] = "TwoCenter";
  71. LAYOUT_TYPE[LAYOUT_TYPE["ThreeCenter"] = 3] = "ThreeCenter";
  72. })(LAYOUT_TYPE || (LAYOUT_TYPE = {}));
  73. ;
  74. let SILTER_BAR_MODE;
  75. (function (SILTER_BAR_MODE) {
  76. SILTER_BAR_MODE[SILTER_BAR_MODE["auto"] = 0] = "auto";
  77. SILTER_BAR_MODE[SILTER_BAR_MODE["show"] = 1] = "show";
  78. SILTER_BAR_MODE[SILTER_BAR_MODE["hidden"] = 2] = "hidden";
  79. })(SILTER_BAR_MODE || (SILTER_BAR_MODE = {}));
  80. let ADDITION_FUNCTION;
  81. (function (ADDITION_FUNCTION) {
  82. ADDITION_FUNCTION[ADDITION_FUNCTION["AutoNextPage"] = 0] = "AutoNextPage";
  83. ADDITION_FUNCTION[ADDITION_FUNCTION["SideToolBar"] = 1] = "SideToolBar";
  84. })(ADDITION_FUNCTION || (ADDITION_FUNCTION = {}));
  85. const LAYOUT_CONFIG = {
  86. saveName: "PAGE_LAYOUT",
  87. defaultValue: LAYOUT_TYPE.General
  88. };
  89. const SILDER_BAR_CONFIG = {
  90. saveName: "silder_bar",
  91. defaultValue: SILTER_BAR_MODE.hidden
  92. };
  93. const ADDITION_FUNCTION_CONFIGS = {
  94. AutoNextPage: {
  95. saveName: "funciton_auto_next_page",
  96. defaultSwitch: false,
  97. functionName: ADDITION_FUNCTION.AutoNextPage
  98. },
  99. SideToolBar: {
  100. saveName: "funciton_side_tool_bar",
  101. defaultSwitch: false,
  102. functionName: ADDITION_FUNCTION.SideToolBar
  103. }
  104. };
  105. const INLINE_STYLE_BASE = `#content_left .c-container[data-lp],#content_left>.c-container[tpl=short_video_pc],#content_left>div>.c-container[tpl=short_video_pc],#content_left>table,#content_right,#demo,#ent_sug,#foot,#head .headBlock,#imsg,#page .fk,#result_logo img,#rs_new,#rs_top_new,#searchTag,#top-ad,#u>a .c-icon,.c-recommend,.hint_common_restop,.hit_top_new,.leftBlock,.rrecom-btn-parent,body>.res_top_banner,iframe{display:none!important}#content_left>div:not([id]),#content_left>div[style*='display:block !important;'],body>div[style*='position: absolute;'],body>div[style*='position: fixed;']{display:none!important;position:absolute!important;top:-1px!important;clip:rect(0 0 0 0)!important;z-index:-1!important}.bd-none{display:none!important}#form{display:none!important}#baidu_content_left{margin-left:200px}.c-container{display:inline-block;margin:20px auto}#container{position:relative!important;padding-top:60px!important}body{background:#f1f2f3!important}html{overflow-y:scroll}:root{overflow-y:auto;overflow-x:hidden}:root body{position:absolute}body{width:100vw;overflow:hidden}#form{position:absolute!important;z-index:-1;-webkit-transform:scaleX(0);transform:scaleX(0)}.bd-container-search{position:absolute;top:8px;left:150px}.bd-docker{position:absolute;top:0;left:0}.bd-barbox-ul{position:absolute;display:flow-root;width:640px;height:40px;font-size:18px;line-height:1.2;text-align:center;z-index:2}.bd-barbox-li{float:left;position:relative}.bd-barbox-li:first-of-type:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;z-index:-1}.bd-barbox-button,.bd-barbox-input{border:none!important;outline:0!important}.bd-barbox-input{position:relative;width:540px;height:40px;color:#000;font-size:inherit;border-radius:3px 0 0 3px;background:#e3e3e3!important;padding-left:15px;padding-right:10px;-webkit-transition:width .3s;transition:width .3s;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.bd-barbox-input:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;z-index:-1;background:#fff}.bd-barbox-button{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:100px;height:40px;line-height:1;font-size:inherit;background:linear-gradient(40deg,#18c0fe,#1677ff);border-radius:0 3px 3px 0;color:#fff;-webkit-transition:background .3s;transition:background .3s}.bd-barbox-button:hover{cursor:pointer;background:linear-gradient(40deg,#2070e5,#1890ff);-webkit-transition:background .3s;transition:background .3s}.bd-associate-ul{position:absolute;width:650px;top:50px;background:0 0;border-radius:.5em;text-align:left}.bd-associate-ul:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;z-index:-1;background:#fdfdfd;-webkit-box-shadow:0 0 5px 1px rgba(0,0,0,.2);box-shadow:0 0 5px 1px rgba(0,0,0,.2)}.bd-associate-li{font-size:16px;padding:10px 20px;list-style-type:none!important}.bd-associate-li>span{font-weight:700}.bd-associate-li:hover{cursor:pointer}.bd-associate-li:first-of-type{border-radius:.5em .5em 0 0}.bd-associate-li:last-of-type{border-radius:0 0 .5em .5em}.bd-associate-li:only-of-type{border-radius:.5em!important}.bd-associate-selected{position:relative;color:#2196f3;background:#f3f3f3!important}.bd-associate-selected:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;-webkit-box-shadow:0 0 3px hsla(0,0%,13%,.1);box-shadow:0 0 3px hsla(0,0%,13%,.1)}#head{background-color:#f1f2f3!important;border-bottom:1px solid!important;border-color:#e4e5e7!important;-webkit-box-shadow:none!important;box-shadow:none!important}#head .s_form{height:58px!important}#u .s-top-img-wrapper,.set-result-tts{display:none!important}#u{font-size:15px!important;margin-top:8px!important;padding-right:10px!important}#u a,#u a:hover{text-decoration:none}#u>a{-webkit-box-sizing:border-box!important;box-sizing:border-box!important;font-family:"Microsoft YaHei"!important;font-size:inherit!important;margin:0 8px!important;padding:8px 8px!important;position:relative;background:0 0!important;color:hsla(216,25%,24%,.8)!important;border-radius:3px}#u>a .s-top-username{font-size:15px!important;line-height:24px!important;margin:0!important;padding:0!important}#u>a[name=tj_login]{height:auto!important}#u>a:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;border-radius:3px;background-color:#e4e5e7!important;z-index:-1}#u>a:hover:after{background-color:#fff!important}#user{max-width:250px!important;text-overflow:ellipsis!important;height:auto!important}@media screen and (max-width:1024px){#u .toindex{display:none!important}}.bdpfmenu,.usermenu{width:auto!important;border:1px solid #e4e5e7!important;-webkit-box-shadow:none!important;box-shadow:none!important;padding:0!important;border-radius:0!important}.bdpfmenu{position:fixed!important;top:50px!important;width:100px!important;margin-top:3px!important;margin-right:10px!important}.usermenu{top:35px!important;width:100px!important;margin-top:10px!important;margin-right:0!important;z-index:1}.usermenu a{margin:0!important}.bdpfmenu>a,.usermenu>a{border-radius:0!important;display:block!important;width:auto!important;height:auto!important;margin:0!important;padding:5px 10px!important;font-size:14px!important;line-height:1.8!important;text-align:center!important;background:#fff!important;color:#222!important}.bdpfmenu>a>span,.usermenu>a>span{margin:0!important}.bdpfmenu>a:hover,.usermenu>a:hover{background:#f1f3fd!important;color:#315efb!important}#s_tab{display:none!important}#content_left{display:none!important}#head{width:100%!important}.s_form{padding:0!important}#container{padding-left:0!important}@media screen and (min-width:1921px){.head_wrapper{width:100%;margin:0 auto;position:relative;-webkit-transform:translate3d(-52px,0,1px);transform:translate3d(-52px,0,1px)}}.options_2Vntk{width:auto!important}.result-molecule{width:640px!important}.bd_search_result_container .bd_list{width:640px;float:left}.bd_search_result_container .bd_list:not(:first-of-type){margin-left:10px}.bd_search_result_container .c-container{margin:5px auto!important}.bd_search_result_container .c-container .c-container{width:100%!important}.bd_search_result_container #rs,.bd_search_result_container #rs_new,.bd_search_result_container .bd_list>.c-container[id][tpl]{width:640px!important;margin-top:5px!important;padding:0 20px 10px!important;margin-bottom:5px!important;background:#fff!important;-webkit-box-sizing:border-box!important;box-sizing:border-box!important;border:none!important;border-radius:3px}.bd_search_result_container #rs,.bd_search_result_container .bd_list>.c-container[id]{position:relative!important}.bd_search_result_container #rs:after,.bd_search_result_container .bd_list>.c-container[id]:after{content:"";z-index:-1;position:absolute;top:0;bottom:0;left:0;right:0;-webkit-box-shadow:0 0 30px 1px rgba(0,0,0,.1);box-shadow:0 0 30px 1px rgba(0,0,0,.1)}.bd_search_result_container .c-result-content>.c-container[id]{border:none!important;margin-left:-20px!important}.bd_search_result_container .bd_list>.c-container[tpl*=ty_lasar]{padding:0}.bd_search_result_container .bd_list>.c-container[tpl=soft] .op-soft-title,.bd_search_result_container .bd_list>.c-container[tpl] h3{background:hsla(0,0%,90%,.05)!important;margin:0 -20px 5px!important;padding:8px 20px 6px!important;border-bottom:1px solid hsla(0,2%,10%,.05)!important}.bd_search_result_container .bd_list>.c-container[tpl=jy_rota_wenshu_pc] .c-container{padding-top:0!important}.bd_search_result_container .bd_list>.c-container[tpl=jy_rota_wenshu_pc] header.c-gap-bottom-small{padding-bottom:10px!important}.bd_search_result_container .bd_list>.c-container h3 [class*=OP_LOG_LINK]{color:#fff!important}.bd_search_result_container .bd_list>.c-container h3 a,.bd_search_result_container .bd_list>.c-container h3 a em,.bd_search_result_container .bd_list>.c-container[tpl=soft] .op-soft-title a,.bd_search_result_container .bd_list>.c-container[tpl=soft] .op-soft-title a em{color:#014aa5!important;text-decoration:none!important}.bd_search_result_container .bd_list>.c-container h3 a em,.bd_search_result_container .bd_list>.c-container[tpl=soft] .op-soft-title a em{color:#e45465!important}.bd_search_result_container .bd_list>.c-container h3 a,.bd_search_result_container .op-soft-title a{position:relative;display:inline-block}.bd_search_result_container .bd_list>.c-container h3 a:after,.bd_search_result_container .op-soft-title a:after{position:absolute;z-index:1;content:"";border-bottom:1px solid;bottom:2px;left:100%;width:0;-webkit-transition:width 350ms,left 350ms;-moze-transition:width 350ms,left 350ms;transition:width 350ms,left 350ms}.bd_search_result_container .bd_list>.c-container h3 a:hover:after,.bd_search_result_container .op-soft-title a:hover:after{left:0;width:100%;-webkit-transition:width 350ms;transition:width 350ms}.bd_search_result_container .bd_list>.c-container h3 a:visited,.bd_search_result_container .op-soft-title a:visited{color:#7c32a1!important}.bd_search_result_container .bd_list>.c-container h3 a:visited:after,.bd_search_result_container .op-soft-title a:visited:after{left:100%;width:0;-webkit-transition:width 350ms,left 350ms;-moze-transition:width 350ms,left 350ms;transition:width 350ms,left 350ms}.bd_search_result_container .bd_list>.c-container h3 a:visited:hover:after,.bd_search_result_container .op-soft-title a:visited:hover:after{left:0;width:100%;-webkit-transition:width 350ms;transition:width 350ms}.bd_search_result_container .bd_list>.c-container .c-abstract,.bd_search_result_container .bd_list>.c-container .c-span18,.bd_search_result_container ol li{color:#636363!important;color:#333!important;line-height:1.8}.bd_search_result_container table em{text-decoration:none!important}.bd_search_result_container .c-gap-right-small,.bd_search_result_container .c-gray a,.bd_search_result_container .c-offset>div a,.bd_search_result_container .c-span18 a,.bd_search_result_container .c-span6 a,.bd_search_result_container .c-tabs-content a,.bd_search_result_container .f13 a,.bd_search_result_container .f13 em,.bd_search_result_container .op-b2b-find-all-text,.bd_search_result_container .op-b2b-product-item-title a,.bd_search_result_container .op-generaltable-morelink a,.bd_search_result_container .op-img-address-link-menu a,.bd_search_result_container .op-se-listen-recommend,.bd_search_result_container .op-short-video-pc-more a,.bd_search_result_container .op-short-video-pc-poster a,.bd_search_result_container .op-tieba-general-mainpl a,.bd_search_result_container .op-tieba-general-right,.bd_search_result_container .op-tieba-novel-lookmore a,.bd_search_result_container .op-tieba-novel-trone a,.bd_search_result_container .op-tieba-novel-trtwo a,.bd_search_result_container .op-tieba-offical-lookmore a,.bd_search_result_container .op-tieba_offical-lianjie,.bd_search_result_container .op_dq01_morelink a,.bd_search_result_container .op_dq01_table a,.bd_search_result_container .op_dq01_title,.bd_search_result_container .op_generalqa_answer_title a,.bd_search_result_container .op_jingyan_list p.c-gap-top-small,.bd_search_result_container .op_offical_weibo_content a,.bd_search_result_container .op_offical_weibo_pz a,.bd_search_result_container .op_tieba2_tablinks_container a,.bd_search_result_container .subLink_factory a,.bd_search_result_container tbody a{text-decoration:none!important;color:#014aa5!important}.bd_search_result_container .c-gap-right-small:hover,.bd_search_result_container .c-gray:hover a,.bd_search_result_container .c-offset>div a:hover,.bd_search_result_container .c-span6 a:hover,.bd_search_result_container .c-tabs-content a:hover,.bd_search_result_container .f13 a:hover,.bd_search_result_container .f13 em:hover,.bd_search_result_container .op-b2b-product-item-title a:hover,.bd_search_result_container .op-generaltable-morelink a:hover,.bd_search_result_container .op-img-address-link-menu a:hover,.bd_search_result_container .op-se-listen-recommend:hover,.bd_search_result_container .op-short-video-pc-more a:hover,.bd_search_result_container .op-short-video-pc-poster a:hover,.bd_search_result_container .op-tieba-general-mainpl a:hover,.bd_search_result_container .op-tieba-general-right:hover,.bd_search_result_container .op-tieba-offical-lookmore a:hover,.bd_search_result_container .op-tieba_offical-lianjie:hover,.bd_search_result_container .op_dq01_morelink a:hover,.bd_search_result_container .op_dq01_table a:hover,.bd_search_result_container .op_dq01_title:hover,.bd_search_result_container .op_generalqa_answer_title:hover,.bd_search_result_container .op_jingyan_list p:hover,.bd_search_result_container .op_tieba2_tablinks_container a:hover,.bd_search_result_container .subLink_factory a:hover,.bd_search_result_container tbody a:hover{text-decoration:underline!important}.bd_search_result_container .f13 a{color:green!important}.bd_search_result_container em{color:#e45465}.bd_search_result_container .c-img6{opacity:.9}.bd_search_result_container .c-span18{width:455px!important}.bd_search_result_container .c-span24{width:100%!important;line-height:1.8!important}.bd_search_result_container .c-border{width:auto!important;border:none!important;border-bottom-color:transparent;border-right-color:transparent;-webkit-box-shadow:none!important;box-shadow:none!important}.bd_search_result_container .bd_list>.c-container .op-img-address-link-type,.bd_search_result_container .op_jingyan_list,.bd_search_result_container .se_com_irregular_gallery ul li{display:inline-block}.bd_search_result_container::after{content:"";display:table;clear:both}#page{display:none!important}#bd_page_number{width:640px;text-align:center;margin-top:20px;margin-bottom:100px}#bd_page_number .bd_page_item{border:none;border-radius:6px;background-color:#fff;color:#3951b3;margin-right:10px;display:inline-block;vertical-align:text-bottom;text-align:center;text-decoration:none;overflow:hidden}#bd_page_number .bd_page_item span{display:inline-block;cursor:pointer;width:100%;height:100%;line-height:36px}#bd_page_number .bd_page_item :hover{border:none;background:#4e6ef2;color:#fff}#bd_page_number .bd_page_number{width:36px;height:36px}#bd_page_number .bd_page_next_page,#bd_page_number .bd_page_pre_page{width:80px;height:36px}#bd_page_number .bd_page_next_page{margin-right:0}#bd_page_number .bd_page_number_selected{pointer-events:none;background-color:#4e6ef2;color:#fff} `;
  106. const INLINE_STYLE_INDEX = `#bds-message-wrapper,#bottom_container,#bottom_layer,#ftCon,#s-hotsearch-wrapper,#s_lm_wrap,#s_main,#s_side_wrapper,#s_top_wrap.s-down .s-center-box,.guide-info,.qrcodeCon,.s-set-homepage-tts,.s-top-wrap.s-isindex-wrap.s-down,.show-feed{display:none!important}body{position:relative;overflow-y:hidden!important;background:0 0!important}body::after{position:absolute;content:"";top:0;bottom:0;left:0;right:0;z-index:-100;background-color:#f1f2f3}#s_top_wrap{border:none!important}#head_wrapper{z-index:1!important}#s_main{background:hsla(0,0%,100%,.6)!important}#head_wrapper .s_form{width:900px}.s-top-wrap{background:0 0!important}.s-isindex-wrap .c-color-t:after{content:"";position:absolute;top:0;bottom:-2px;left:50%;right:50%;z-index:-2;border-bottom:2px solid}.s-isindex-wrap .c-color-t:hover{color:#2196f3!important;position:relative}.s-isindex-wrap .c-color-t:hover:after{left:0;right:0;-webkit-transition:left .3s ease,right .3s ease;transition:left .3s ease,right .3s ease}.s-top-more-content .c-color-t{color:#555!important;text-shadow:none!important}.s-top-more-content .c-color-t:hover{color:#4682b4!important}.s-isindex-wrap .c-color-red.c-color-red{color:#fff}.s-isindex-wrap .c-color-red.c-color-red:hover{color:#2196f3}#form{display:none!important}.bd-container-search{position:relative}.bd-barbox-ul{position:absolute;display:flow-root;top:200px;bottom:-50px;width:100%;height:48px;font-size:20px;line-height:1.2;text-align:center;z-index:2}.bd-barbox-center{display:inline-block;margin:0 auto;border-radius:30px;-webkit-box-shadow:0 0 8px 3px rgba(0,0,0,.1);box-shadow:0 0 8px 3px rgba(0,0,0,.1);text-align:center}.bd-barbox-li{float:left;position:relative}.bd-barbox-li:first-of-type:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;border-radius:20px 20px 0 0;background:hsla(0,0%,100%,.2)!important;-webkit-filter:blur(5px);filter:blur(5px);z-index:-1}.bd-barbox-button,.bd-barbox-input{border:none!important}.bd-barbox-input{position:relative;width:450px;height:40px;color:#000;text-shadow:0 0 1px 1px #000;border-radius:20px 0 0 20px;background:hsla(0,0%,100%,.3);padding-left:25px;padding-right:10px;-webkit-transition:width .3s;transition:width .3s;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.bd-barbox-input:focus{width:500px;background:hsla(0,0%,100%,.6);-webkit-transition:width .3s ease,background .5s ease-out;transition:width .3s ease,background .5s ease-out}.bd-barbox-input:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;z-index:-1;background:#fff;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px)}.bd-barbox-button{position:relative;height:40px;padding:0 20px;line-height:1;background:hsla(216,80%,55%,.7);border-radius:0 20px 20px 0;color:#fff;-webkit-transition:background .3s;transition:background .3s}.bd-barbox-button:hover{background:#3079e8;-webkit-transition:background .3s;transition:background .3s}.bd-associate-ul{position:absolute;width:620px;top:250px;left:0;margin-left:140px;background:0 0;border-radius:.5em;text-align:left;-webkit-box-shadow:0 0 10px 5px rgba(0,0,0,.1);box-shadow:0 0 10px 5px rgba(0,0,0,.1);overflow:hidden}.bd-associate-ul:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;z-index:-1;background:hsla(0,0%,100%,.6);-webkit-filter:blur(1px);filter:blur(1px);margin:-30px}.bd-associate-li{font-size:16px;padding:10px 20px;list-style-type:none!important}.bd-associate-li>span{font-weight:700}.bd-associate-li:hover{cursor:pointer}.bd-associate-li:first-of-type{border-radius:.5em .5em 0 0}.bd-associate-li:last-of-type{border-radius:0 0 .5em .5em}.bd-associate-li:only-of-type{border-radius:.5em!important}.bd-associate-selected{position:relative;color:#2196f3;background:rgba(255,255,255,.3)!important}.bd-associate-selected:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;-webkit-box-shadow:0 0 10px hsla(0,0%,13%,.1);box-shadow:0 0 10px hsla(0,0%,13%,.1)}#head_wrapper .s-p-top{height:181px}#lg>img{display:none!important}#lg{position:relative;width:900px}#lg:after{content:"";position:absolute;top:0;left:0;margin-left:35px;z-index:100}#lg:after{width:100%;height:230px;-webkit-transform:scale(.35);transform:scale(.35);background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAr4AAADwCAYAAADmSmdAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpBQUM5Qzc0MkM5N0NFNjExQkJFNTgyNTRGQzQzMjU2NSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo5OTkxNTNBMjdDQzkxMUU2ODNCN0IyNjU5MTY1OUJBRCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo5OTkxNTNBMTdDQzkxMUU2ODNCN0IyNjU5MTY1OUJBRCIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkFCQzlDNzQyQzk3Q0U2MTFCQkU1ODI1NEZDNDMyNTY1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkFBQzlDNzQyQzk3Q0U2MTFCQkU1ODI1NEZDNDMyNTY1Ii8+IDwvcmRmOkRlc2NyaXB0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)!important;background-repeat:no-repeat}.bd-display{display:none}.bd-bg-ul{position:fixed;top:0;bottom:0;left:0;right:0;z-index:-1}.bd-bg-ul:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;z-index:2;-webkit-filter:blur(20px);filter:blur(20px);background-color:rgba(29,23,36,.2)}.bd-bg-li{position:absolute;top:0;bottom:0;left:0;right:0;z-index:-1;color:transparent}.bd-bg-li{background-size:100% 100%;background-repeat:no-repeat;background-attachment:fixed}.bd-opacity{opacity:0}#bd-search-association{background:red;width:575px;height:500px;position:absolute;margin-top:45px;border-radius:5px}.bd-head-more{background:red;position:fixed;top:50px;right:10px} `;
  107. const INLINE_STYLE_MENU = `#u>#bd-menu-btn:hover{-webkit-transition:background .3s;transition:background .3s}#bd-menu-detilas{position:absolute;top:-3px;left:-10px;margin-top:50px;border:1px solid #e4e5e7;background-color:#fff;-webkit-box-shadow:0 0 15px 1px rgba(0,0,0,.2);box-shadow:0 0 15px 1px rgba(0,0,0,.2)}#bd-menu-detilas .bt-menu-piece{display:flow-root;float:left;width:100px}#bd-menu-detilas ol{text-align:center;-webkit-box-shadow:none!important;box-shadow:none!important;border-bottom:1px dashed #e4e5e7!important}#bd-menu-detilas ol li{text-align:left;list-style:none!important;margin-left:-5px;padding:0 5px;color:#222;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#bd-menu-detilas ol li input{-webkit-appearance:auto!important;-moz-appearance:auto!important;appearance:auto!important}#bd-menu-detilas ol:last-child{border-bottom:none!important}#bd-menu-detilas #bd_menu_save{display:block;width:100%;height:25px;margin-top:3px;border:1px solid #9e9e9e;cursor:pointer} `;
  108. const INLINE_STYLE_ONE_CENTER = `#container.sam_newgrid{margin:0!important;width:100%!important}.bd-container-search{position:relative!important;left:0!important;margin:auto;width:640px;left:4px!important}.result-molecule{width:640px!important;margin:auto!important}#container.sam_newgrid{margin:0!important;width:100%!important}.bd_serach_result_dock{width:640px;margin:auto}@media screen and (min-width:1921px){#wrapper_wrapper{margin-left:0!important}}#bd_page_number{margin:20px auto 100px!important} `;
  109. const INLINE_SIDEBAE = `#bd_sidebar{position:fixed;display:block;width:110px;height:100%;top:60px;z-index:100;background-color:transparent;color:#fff1c1;text-align:center;font-size:14px;left:-100px;opacity:0;opacity:1}#bd_sidebar:hover{opacity:1;left:0;background-color:#2b333e;overflow:hidden;-webkit-transition:left .2s;transition:left .2s}#bd_sidebar li{position:relative;width:100%;height:40px;line-height:40px;background:0 0!important;cursor:pointer}#bd_sidebar li:hover{padding-left:5px!important;-webkit-transition:padding-left .2s;transition:padding-left .2s;border-bottom-color:transparent}#bd_sidebar li:hover::after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;z-index:-2;background:linear-gradient(to right,#00a8ff 3px,#3d5a83 0)!important} `;
  110. const INLINE_STYLE_THREE_CENTER = `#container.sam_newgrid{margin:0!important;width:100%!important}.bd-container-search{position:relative!important;left:0!important;margin:auto;width:640px;left:4px!important}.result-molecule{width:1940px!important;margin:auto!important}#container.sam_newgrid{margin:0!important;width:100%!important}.bd_serach_result_dock{width:1940px;margin:auto}@media screen and (min-width:1921px){#wrapper_wrapper{margin-left:0!important}}#bd_page_number{margin:20px auto 100px!important} `;
  111. const INLINE_STYLE_TWO_CENTER = `#container.sam_newgrid{margin:0!important;width:100%!important}.bd-container-search{position:relative!important;left:0!important;margin:auto;width:640px;left:4px!important}.result-molecule{width:1290px!important;margin:auto!important}#container.sam_newgrid{margin:0!important;width:100%!important}.bd_serach_result_dock{width:1290px;margin:auto}@media screen and (min-width:1921px){#wrapper_wrapper{margin-left:0!important}}#bd_page_number{margin:20px auto 100px!important} `;
  112. class GM {
  113. static getValue(key, defaultValue) {
  114. try {
  115. return GM_getValue(key, defaultValue);
  116. }
  117. catch (error) {
  118. console.debug(error);
  119. }
  120. }
  121. static setValue(key, value) {
  122. try {
  123. GM_setValue(key, value);
  124. }
  125. catch (error) {
  126. console.debug(error);
  127. }
  128. }
  129. static addStyle(content) {
  130. Promise.resolve().then(() => {
  131. try {
  132. GM_addStyle(content);
  133. }
  134. catch (error) {
  135. console.debug(error);
  136. }
  137. });
  138. }
  139. static xmlhttpRequest(config) {
  140. try {
  141. GM_xmlhttpRequest(config);
  142. }
  143. catch (error) {
  144. console.debug(error);
  145. }
  146. }
  147. static getResourceText(name) {
  148. try {
  149. return GM_getResourceText(name);
  150. }
  151. catch (error) {
  152. console.debug(error);
  153. }
  154. }
  155. }
  156. class OptionControl {
  157. constructor(name, defaultValue) {
  158. this.GM = GM;
  159. this.name = name;
  160. this.defalutValue = defaultValue;
  161. }
  162. getDefaultValue() {
  163. return this.defalutValue;
  164. }
  165. setOption(value) {
  166. this.GM.setValue(this.getOptionName(), value);
  167. }
  168. getOptionName() {
  169. return this.name;
  170. }
  171. getOptionValue() {
  172. return this.GM.getValue(this.getOptionName(), this.getDefaultValue());
  173. }
  174. }
  175. class Debug {
  176. static execute(callback) {
  177. if (Config.isDebug()) {
  178. callback();
  179. }
  180. }
  181. static log(msg) {
  182. this.execute(() => {
  183. console.log(msg);
  184. });
  185. }
  186. static info(msg) {
  187. this.execute(() => {
  188. console.info(msg);
  189. });
  190. }
  191. static count(msg) {
  192. this.execute(() => {
  193. console.count(msg);
  194. });
  195. }
  196. static debug(msg) {
  197. this.execute(() => {
  198. console.debug(msg);
  199. });
  200. }
  201. }
  202. class Config {
  203. static isDebug() {
  204. return SYSTEM_CONFIGS.IS_DEBUG;
  205. }
  206. }
  207. class Assoicate {
  208. constructor() {
  209. this.templateUrlAssociate = "https://www.baidu.com/sugrec?pre=1&p=3&ie=utf-8&json=1&prod=pc&from=pc_web&req=2&csor=10&wd=%s";
  210. }
  211. getURL(templateURL, keyWord) {
  212. const isEmptyKeyWord = keyWord.trim().length <= 0;
  213. if (isEmptyKeyWord) {
  214. return "";
  215. }
  216. else {
  217. return templateURL.replace(/\%s/i, encodeURIComponent(keyWord));
  218. }
  219. }
  220. decodeString(content) {
  221. return unescape(content.replace(/\\\u/g, "%u"));
  222. }
  223. stringToObject(content) {
  224. let result = `{"s":${content.match(/\[\".+\"\]/i)}}`;
  225. return JSON.parse(result);
  226. }
  227. processData(content, name) {
  228. let strContent = this.decodeString(content);
  229. let objContent = this.stringToObject(strContent);
  230. return name ? objContent[name] : objContent;
  231. }
  232. getItems(responseText) {
  233. let response = JSON.parse(responseText);
  234. let searchResults = response["g"];
  235. let items = [];
  236. for (const key in searchResults) {
  237. let item = searchResults[key]["q"];
  238. items.push(item);
  239. }
  240. return items;
  241. }
  242. getAssociateURL(keyWord) {
  243. return this.getURL(this.templateUrlAssociate, keyWord);
  244. }
  245. }
  246. class AssociateManager extends Assoicate {
  247. constructor(o) {
  248. super();
  249. this.o = o;
  250. }
  251. deal(responseText) {
  252. let items = super.getItems(responseText);
  253. this.update(items);
  254. }
  255. update(items) {
  256. this.o.update(items);
  257. }
  258. getAssoicateURL(keyWord) {
  259. return super.getAssociateURL(keyWord);
  260. }
  261. request(keyword) {
  262. let that = this;
  263. let url = this.getAssociateURL(keyword);
  264. GM.xmlhttpRequest({
  265. method: "GET",
  266. url: url,
  267. timeout: 3000,
  268. responseType: "json",
  269. headers: {
  270. "User-Agent": navigator.userAgent,
  271. "Cookie": document.cookie,
  272. },
  273. onload: (response) => {
  274. if (response.status === 200 ||
  275. response.status === 304) {
  276. that.deal(response.responseText);
  277. }
  278. },
  279. onerror: (error) => {
  280. console.error("联想功能异常,请排查:", error);
  281. }
  282. });
  283. }
  284. search(keyWord) {
  285. let isEmptyKeyWord = keyWord.trim().length <= 0;
  286. let emptyKeyWord = [""];
  287. if (isEmptyKeyWord) {
  288. this.update(emptyKeyWord);
  289. }
  290. else {
  291. this.request(keyWord);
  292. }
  293. }
  294. }
  295. class AvoidMulExecute {
  296. constructor() {
  297. this.SING_NAME = "IsRunBaidu";
  298. }
  299. getSignElement() {
  300. return $("#content_left");
  301. }
  302. setSign() {
  303. let container = this.getSignElement();
  304. container.attr(this.SING_NAME, "true");
  305. }
  306. hasSign() {
  307. let container = this.getSignElement();
  308. return !!container.attr(this.SING_NAME);
  309. }
  310. }
  311. let Baidu = (function () {
  312. class Node {
  313. constructor(obj) {
  314. this.obj = obj;
  315. this.isReady = false;
  316. this.isDelay = false;
  317. }
  318. setReadyRun() {
  319. this.isReady = true;
  320. return this;
  321. }
  322. setDealyRun() {
  323. this.isDelay = true;
  324. return this;
  325. }
  326. isReadyRun() {
  327. return this.isReady;
  328. }
  329. isDelayRun() {
  330. return this.isDelay;
  331. }
  332. start() {
  333. new this.obj().start();
  334. }
  335. execute() {
  336. if (this.isReadyRun()) {
  337. $().ready(() => {
  338. this.start();
  339. });
  340. return;
  341. }
  342. if (this.isDelayRun()) {
  343. setTimeout(() => {
  344. this.start();
  345. }, 0);
  346. return;
  347. }
  348. this.start();
  349. }
  350. }
  351. class Componse {
  352. constructor() {
  353. this.list = [];
  354. }
  355. add(node) {
  356. this.list.push(node);
  357. }
  358. execute() {
  359. for (let node of this.list) {
  360. node.execute();
  361. }
  362. }
  363. }
  364. class Baidu extends Componse {
  365. constructor() {
  366. super();
  367. }
  368. add(obj) {
  369. let node = new Node(obj);
  370. super.add(node);
  371. return this;
  372. }
  373. addReady(obj) {
  374. let node = new Node(obj).setReadyRun();
  375. super.add(node);
  376. return this;
  377. }
  378. addDealy(obj) {
  379. let node = new Node(obj).setDealyRun();
  380. super.add(node);
  381. return this;
  382. }
  383. addDelayAndReady(obj) {
  384. this.addDealy(obj);
  385. this.addReady(obj);
  386. return this;
  387. }
  388. execute() {
  389. super.execute();
  390. }
  391. }
  392. return Baidu;
  393. })();
  394. class UrlEditor {
  395. constructor(url) {
  396. this.url = new URL(url);
  397. }
  398. getFinalUrl() {
  399. return this.url.href;
  400. }
  401. hasParam(name) {
  402. return this.url.searchParams.has(name);
  403. }
  404. getParamValue(name) {
  405. return String(this.url.searchParams.get(name));
  406. }
  407. setParam(key, value) {
  408. this.url.searchParams.set(key, value);
  409. }
  410. }
  411. class Component {
  412. constructor() {
  413. this.list = [];
  414. }
  415. add(obj) {
  416. this.list.push(obj);
  417. }
  418. execute() {
  419. for (let obj of this.list) {
  420. obj.execute();
  421. }
  422. }
  423. }
  424. class Docker {
  425. createDocker() {
  426. return $("<div>");
  427. }
  428. }
  429. class Leaf extends Component {
  430. constructor(obj) {
  431. super();
  432. this.obj = obj;
  433. }
  434. insert() {
  435. this.obj.insertNode();
  436. }
  437. add(obj) {
  438. super.add(obj);
  439. }
  440. execute() {
  441. this.insert();
  442. super.execute();
  443. }
  444. }
  445. class Router {
  446. getCurrentPagePathURL() {
  447. return location.origin + location.pathname;
  448. }
  449. isRouterPage(routers) {
  450. const currentRouterURL = this.getCurrentPagePathURL();
  451. return routers.some((routerURL) => {
  452. return routerURL === currentRouterURL;
  453. });
  454. }
  455. addRoute(routers, factory) {
  456. if (this.isRouterPage(routers)) {
  457. factory.create();
  458. }
  459. }
  460. }
  461. class BaiduSearch {
  462. constructor() {
  463. this.DEFAULT_URL = "https://www.baidu.com/s?ie=utf-8";
  464. this.URL = new UrlEditor(this.DEFAULT_URL);
  465. }
  466. addSearchKeyword(searchContent) {
  467. searchContent = searchContent.trim();
  468. this.URL.setParam("wd", searchContent);
  469. return this;
  470. }
  471. openRandonNumber() {
  472. let randomBase64Code = window.btoa(new Date().getTime()).replace(/=+/g, "");
  473. return this;
  474. }
  475. addRN(rate) {
  476. this.URL.setParam("rn", String(rate));
  477. return this;
  478. }
  479. addPN(order) {
  480. this.URL.setParam("pn", String(order));
  481. return this;
  482. }
  483. addParam(key, value) {
  484. this.URL.setParam(key, value);
  485. return this;
  486. }
  487. addBaiduDeaultParam() {
  488. let that = this;
  489. let $inputs = $("#form>input");
  490. $inputs.each(function (index, element) {
  491. let $element = $(element);
  492. let name = String($element.attr("name"));
  493. let value = String($element.val());
  494. if (name != "" && value != "") {
  495. that.addParam(name, value);
  496. }
  497. });
  498. this.addParam("tn", "baidu");
  499. return this;
  500. }
  501. getFinalURL() {
  502. return this.URL.getFinalUrl();
  503. }
  504. openWebWithNewWindow() {
  505. let url = this.getFinalURL();
  506. window.open(url);
  507. }
  508. openWebWithCurrentWindow() {
  509. let url = this.getFinalURL();
  510. location.href = url;
  511. }
  512. tiggerBaiduSumbit() {
  513. let searchContent = String($(".bd-barbox-input").val()).trim();
  514. if (searchContent.length > 0) {
  515. $("#form #kw").attr("value", searchContent.trim());
  516. $("#form").trigger("submit");
  517. }
  518. }
  519. }
  520. class SearchResultsFilter {
  521. constructor() {
  522. this.regulars = [
  523. `[style]`,
  524. `[tpl="b2b_straight"]`,
  525. `[tpl="short_video_pc"]`,
  526. `[tpl="trade_purchase"]`,
  527. `[tpl="img_address"]`,
  528. `[tpl="ads_b2c_universal_card"]`,
  529. `[tpl="zp_exact_new"]`,
  530. `[tpl="se_com_irregular_gallery"]`,
  531. `[tpl="ask_doctor"]`,
  532. `[tpl="med_qa"]`,
  533. `[tpl^="timeliness"]`,
  534. `[tpl^="sp_realtime"]`,
  535. `[tpl="wenda_abstract_pc"]`,
  536. `[tpl="jingyan_summary"]`,
  537. `[tpl="se_st_single_video_zhanzhang"]`,
  538. `[tpl="open_source_software]"`,
  539. `[data-click*="safe:1|t:1"]`
  540. ];
  541. }
  542. getFilterGularExpress() {
  543. let filterRegular = "div[tpl]";
  544. filterRegular = this.regulars.reduce(function (prev, current) {
  545. return prev + `:not(${current})`;
  546. }, filterRegular);
  547. return filterRegular;
  548. }
  549. removeInvalidItem(items) {
  550. let filterRegular = this.getFilterGularExpress();
  551. let $items = $(items);
  552. $items = $items.filter(filterRegular);
  553. return $items;
  554. }
  555. }
  556. class SessionStorage {
  557. constructor(key, value) {
  558. this.key = key;
  559. this.value = value;
  560. }
  561. hasStorage() {
  562. return sessionStorage.getItem(this.key) === this.value;
  563. }
  564. storage() {
  565. sessionStorage.setItem(this.key, this.value);
  566. }
  567. clear() {
  568. sessionStorage.removeItem(this.key);
  569. }
  570. }
  571. class StyleContent {
  572. getStlyeForIndex() {
  573. return INLINE_STYLE_INDEX;
  574. }
  575. getStyleForBase() {
  576. return INLINE_STYLE_BASE;
  577. }
  578. getStyleForMenu() {
  579. return INLINE_STYLE_MENU;
  580. }
  581. getStyleForSidebar() {
  582. return INLINE_SIDEBAE;
  583. }
  584. getStyleForLayoutOneCenter() {
  585. return INLINE_STYLE_ONE_CENTER;
  586. }
  587. getStyleForLayoutTwoCenter() {
  588. return INLINE_STYLE_TWO_CENTER;
  589. }
  590. getStyleForLayoutThreeCenter() {
  591. return INLINE_STYLE_THREE_CENTER;
  592. }
  593. }
  594. class StyleControl {
  595. constructor() {
  596. this.GM = GM;
  597. this.cache = "";
  598. }
  599. reset() {
  600. this.cache = "";
  601. }
  602. addStyle() {
  603. this.GM.addStyle(this.cache);
  604. }
  605. add(style) {
  606. this.cache = this.cache.concat(style);
  607. return this;
  608. }
  609. end() {
  610. this.addStyle();
  611. this.reset();
  612. }
  613. }
  614. class SyncRequest {
  615. constructor(dealer) {
  616. this.GM = GM;
  617. this.responseType = "json";
  618. this.dealer = dealer;
  619. }
  620. deal(response) {
  621. this.dealer.deal(response);
  622. }
  623. setResponseType(responseType) {
  624. this.responseType = responseType;
  625. return this;
  626. }
  627. request(requestURL) {
  628. let that = this;
  629. this.GM.xmlhttpRequest({
  630. method: "GET",
  631. url: requestURL,
  632. timeout: 3000,
  633. responseType: that.responseType,
  634. headers: {
  635. "User-Agent": navigator.userAgent,
  636. "Cookie": document.cookie,
  637. },
  638. onload: (response) => {
  639. if (response.status === 200 ||
  640. response.status === 304) {
  641. that.deal(response.response);
  642. }
  643. }
  644. });
  645. }
  646. }
  647. class OptionSelect extends OptionControl {
  648. constructor(layoutConfig) {
  649. super(layoutConfig.saveName, layoutConfig.defaultValue);
  650. }
  651. }
  652. class PageLayoutOption extends OptionSelect {
  653. constructor() {
  654. super(LAYOUT_CONFIG);
  655. }
  656. getCurrentPageType() {
  657. return Number(super.getOptionValue());
  658. }
  659. getName() {
  660. return super.getOptionName();
  661. }
  662. setPageLayoutType(value) {
  663. return super.setOption(value);
  664. }
  665. }
  666. class SilderBarOption extends OptionSelect {
  667. constructor() {
  668. super(SILDER_BAR_CONFIG);
  669. }
  670. getCurrentMode() {
  671. return Number(super.getOptionValue());
  672. }
  673. getName() {
  674. return super.getOptionName();
  675. }
  676. setMode(value) {
  677. return super.setOption(value);
  678. }
  679. }
  680. class OptionSwitch extends OptionControl {
  681. constructor(functionConfig) {
  682. super(functionConfig.saveName, functionConfig.defaultSwitch);
  683. this.functionName = functionConfig.functionName;
  684. }
  685. isEnable() {
  686. return Boolean(super.getOptionValue());
  687. }
  688. enable() {
  689. super.setOption(true);
  690. }
  691. disable() {
  692. super.setOption(false);
  693. }
  694. getName() {
  695. return super.getOptionName();
  696. }
  697. getFunctionName() {
  698. return this.functionName;
  699. }
  700. }
  701. class AutoNextPageSwitch extends OptionSwitch {
  702. constructor() {
  703. super(ADDITION_FUNCTION_CONFIGS.AutoNextPage);
  704. }
  705. }
  706. class SideToolBarSwitch extends OptionSwitch {
  707. constructor() {
  708. super(ADDITION_FUNCTION_CONFIGS.SideToolBar);
  709. }
  710. }
  711. let WallPaperModel;
  712. (function (WallPaperModel) {
  713. class Bing {
  714. constructor() {
  715. this.GM = GM;
  716. this.BING_GM_NAME = "bing_images";
  717. this.BING_DEFALUT_IMAGES = ["https://pic.imgdb.cn/item/5eca80bfc2a9a83be52d1cb0.jpg"];
  718. this.BING_REMOTE_IMAGE_URL = `https://cn.bing.com/HPImageArchive.aspx?format=js&n=8&mkt=zh-CN`;
  719. this.BING_HOSTNAME = `https://cn.bing.com`;
  720. }
  721. getDefaultImages() {
  722. return this.BING_DEFALUT_IMAGES;
  723. }
  724. saveImagesToLocal(images) {
  725. let key = this.BING_GM_NAME;
  726. this.GM.setValue(key, images);
  727. }
  728. getImagesFromLocal() {
  729. let key = this.BING_GM_NAME;
  730. return this.GM.getValue(key) || this.getDefaultImages();
  731. }
  732. hasCacheLocalImage() {
  733. let images = this.getImagesFromLocal();
  734. return images.length > 1;
  735. }
  736. }
  737. WallPaperModel.Bing = Bing;
  738. })(WallPaperModel || (WallPaperModel = {}));
  739. (function (WallPaperModel) {
  740. class Images {
  741. constructor(o) {
  742. this.images1 = [
  743. "http://img.netbian.com/file/2019/0808/7062756ab554ab172d31ae293d2fa9e6.jpg",
  744. "https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1589899749&di=c016b13a5a98e2dbd6a207b8bb776580&src=http://pic1.win4000.com/wallpaper/2018-11-05/5bdfd64cbcd82.jpg",
  745. "https://desk-fd.zol-img.com.cn/t_s1920x1080c5/g5/M00/09/04/ChMkJ14S2WmIcR4MAASTED6paWcAAwKOAIG18EABJMo577.jpg",
  746. "https://desk-fd.zol-img.com.cn/t_s1920x1080c5/g5/M00/09/04/ChMkJ14S2UKIQ7V8AAHhgCbEWSkAAwKNwAT-XgAAeGY606.jpg",
  747. "https://desk-fd.zol-img.com.cn/t_s2560x1440c5/g5/M00/09/04/ChMkJ14S2UqIAJhXAAZvffHvn_oAAwKNwD6CH8ABm-V325.jpg",
  748. "https://desk-fd.zol-img.com.cn/t_s2560x1600c5/g5/M00/09/04/ChMkJl4S2W2INN3iACCh3pDxPQMAAwKOAKZtUsAIKH2841.jpg",
  749. "https://desk-fd.zol-img.com.cn/t_s1920x1080c5/g5/M00/09/0D/ChMkJ1e2_KKIPLgPAAUyABcaCxEAAUkhANeazAABTIY478.jpg",
  750. "https://desk-fd.zol-img.com.cn/t_s1920x1080c5/g5/M00/02/08/ChMkJ1bKzS-IMP1aAEMHk65qAm4AALI-QAAAAAAQwer218.jpg",
  751. "https://desk-fd.zol-img.com.cn/t_s1920x1080c5/g5/M00/02/08/ChMkJlbKzTCIKFkcACIWcwMYvWsAALI-QDORlYAIhaL394.jpg",
  752. "https://desk-fd.zol-img.com.cn/t_s1920x1080c5/g5/M00/02/08/ChMkJlbKzTGIEcieAFFa4NXfo20AALI-QEr_lIAUVr4406.jpg",
  753. "https://desk-fd.zol-img.com.cn/t_s1920x1080c5/g5/M00/02/03/ChMkJlbKx2qIKB_ZAAKJbsI4qNMAALHzQFvTQ0AAomG519.jpg",
  754. "https://desk-fd.zol-img.com.cn/t_s1920x1080c5/g4/M09/0F/01/ChMly12oJfuIDM0ZAAfuqk1g34AAAYKzgNEBzEAB-7C780.jpg",
  755. ];
  756. this.images2 = [
  757. "https://momentumdash.com/backgrounds/01.jpg",
  758. "https://momentumdash.com/backgrounds/02.jpg",
  759. "https://momentumdash.com/backgrounds/03.jpg",
  760. "https://momentumdash.com/backgrounds/04.jpg",
  761. "https://momentumdash.com/backgrounds/05.jpg",
  762. "https://momentumdash.com/backgrounds/06.jpg",
  763. "https://momentumdash.com/backgrounds/07.jpg",
  764. "https://momentumdash.com/backgrounds/08.jpg",
  765. "https://momentumdash.com/backgrounds/09.jpg",
  766. "https://momentumdash.com/backgrounds/10.jpg",
  767. "https://momentumdash.com/backgrounds/11.jpg",
  768. "https://momentumdash.com/backgrounds/12.jpg",
  769. "https://momentumdash.com/backgrounds/13.jpg",
  770. ];
  771. this.o = o;
  772. }
  773. getImages() {
  774. return this.o.getImages();
  775. }
  776. getRandomIndex(minNumber, maxNumber) {
  777. return parseInt(Math.random() * (maxNumber - minNumber + 1) + minNumber, 10);
  778. }
  779. getMaxNumber(images) {
  780. return images.length - 1;
  781. }
  782. getMinNumber() {
  783. return 0;
  784. }
  785. getImageURL() {
  786. let images = this.getImages();
  787. let maxNumber = this.getMaxNumber(images);
  788. let minNumber = this.getMinNumber();
  789. let index = this.getRandomIndex(minNumber, maxNumber);
  790. return images[index];
  791. }
  792. }
  793. WallPaperModel.Images = Images;
  794. })(WallPaperModel || (WallPaperModel = {}));
  795. (function (WallPaperModel) {
  796. class SaveRequestWallPaterBing extends WallPaperModel.Bing {
  797. getAbsoluteImagesURL(images) {
  798. let hostName = this.BING_HOSTNAME;
  799. return images.map((image) => {
  800. return new URL(image.url, hostName).href;
  801. });
  802. }
  803. saveImagesToLocal(images) {
  804. super.saveImagesToLocal(images);
  805. }
  806. deal(response) {
  807. let images = this.getAbsoluteImagesURL(response.images);
  808. this.saveImagesToLocal(images);
  809. }
  810. }
  811. WallPaperModel.SaveRequestWallPaterBing = SaveRequestWallPaterBing;
  812. })(WallPaperModel || (WallPaperModel = {}));
  813. (function (WallPaperModel) {
  814. class Tempalte {
  815. constructor(config) {
  816. this.config = config;
  817. }
  818. createImagePanelTemplate() {
  819. let nameBackgroundPanel = this.config.NODE_BG_UL;
  820. return `
  821. <ul class="${nameBackgroundPanel}"></ul>
  822. `;
  823. }
  824. createImageItemTemplate() {
  825. let nameBackgroundItem = this.config.NODE_BG_LI;
  826. return `
  827. <li class="${nameBackgroundItem}"></li>
  828. `;
  829. }
  830. createImageAttribute(imageURL) {
  831. return `background-image: url("${imageURL}"); `;
  832. }
  833. createBingWallpaperNode(imageUrl) {
  834. let $ul = $(this.createImagePanelTemplate());
  835. let $li = $(this.createImageItemTemplate());
  836. let styleValue = this.createImageAttribute(imageUrl);
  837. $li.attr("style", styleValue);
  838. $ul.append($li);
  839. return $ul.html();
  840. }
  841. }
  842. WallPaperModel.Tempalte = Tempalte;
  843. })(WallPaperModel || (WallPaperModel = {}));
  844. (function (WallPaperModel) {
  845. class WallPaperBing extends WallPaperModel.Bing {
  846. hasSessionStorage() {
  847. let key = "wallpaper-bing";
  848. let value = "true";
  849. let session = new SessionStorage(key, value);
  850. if (session.hasStorage()) {
  851. return true;
  852. }
  853. else {
  854. session.storage();
  855. return false;
  856. }
  857. }
  858. isNeedRequest() {
  859. let isNotNeedRequest = this.hasSessionStorage() && this.hasCacheLocalImage();
  860. return !isNotNeedRequest;
  861. }
  862. requestImagesFromRemoteBing() {
  863. let syncRequest = new SyncRequest(new WallPaperModel.SaveRequestWallPaterBing());
  864. syncRequest.request(this.BING_REMOTE_IMAGE_URL);
  865. }
  866. getImages() {
  867. if (this.isNeedRequest()) {
  868. this.requestImagesFromRemoteBing();
  869. }
  870. return super.getImagesFromLocal();
  871. }
  872. }
  873. WallPaperModel.WallPaperBing = WallPaperBing;
  874. })(WallPaperModel || (WallPaperModel = {}));
  875. (function (WallPaperModel) {
  876. class WallpagerConfig {
  877. constructor() {
  878. this.NODE_BG_UL = "bd-bg-ul";
  879. this.NODE_BG_LI = "bd-bg-li";
  880. this.NODE_BG_DISPLAY = "bd-display";
  881. }
  882. }
  883. WallPaperModel.WallpagerConfig = WallpagerConfig;
  884. })(WallPaperModel || (WallPaperModel = {}));
  885. (function (WallPaperModel) {
  886. class WallPaperMomentumdash {
  887. constructor() {
  888. this.GM = GM;
  889. this.images = [
  890. "https://momentumdash.com/backgrounds/01.jpg",
  891. "https://momentumdash.com/backgrounds/02.jpg",
  892. "https://momentumdash.com/backgrounds/03.jpg",
  893. "https://momentumdash.com/backgrounds/04.jpg",
  894. "https://momentumdash.com/backgrounds/05.jpg",
  895. "https://momentumdash.com/backgrounds/06.jpg",
  896. "https://momentumdash.com/backgrounds/07.jpg",
  897. "https://momentumdash.com/backgrounds/08.jpg",
  898. "https://momentumdash.com/backgrounds/09.jpg",
  899. "https://momentumdash.com/backgrounds/10.jpg",
  900. "https://momentumdash.com/backgrounds/11.jpg",
  901. "https://momentumdash.com/backgrounds/12.jpg",
  902. "https://momentumdash.com/backgrounds/13.jpg",
  903. ];
  904. }
  905. request(imageURL) {
  906. let requestURL = imageURL;
  907. this.GM.xmlhttpRequest({
  908. method: "GET",
  909. url: requestURL,
  910. timeout: 3000,
  911. responseType: "json",
  912. });
  913. }
  914. isPreloadAllImages() {
  915. let key = "wallpaper-Momentumdash";
  916. let value = "true";
  917. let session = new SessionStorage(key, value);
  918. if (session.hasStorage()) {
  919. return true;
  920. }
  921. else {
  922. session.storage();
  923. return false;
  924. }
  925. }
  926. preloadAllImages() {
  927. for (const imageURL of this.images) {
  928. this.request(imageURL);
  929. }
  930. }
  931. getImages() {
  932. return this.images;
  933. }
  934. }
  935. })(WallPaperModel || (WallPaperModel = {}));
  936. let SearchFormModel;
  937. (function (SearchFormModel) {
  938. class Action {
  939. constructor(Selector) {
  940. this.Selecor = Selector;
  941. }
  942. getInputValue() {
  943. return this.Selecor.$input.val();
  944. }
  945. }
  946. SearchFormModel.Action = Action;
  947. class ActionAssociateDockerShow extends Action {
  948. constructor(Selector) {
  949. super(Selector);
  950. }
  951. execute(event) {
  952. let $selector = this.Selecor.$associateDocker;
  953. if ($selector.hasClass("bd-none")) {
  954. $selector.removeClass("bd-none");
  955. }
  956. this.Selecor.$associateDocker.show();
  957. }
  958. }
  959. SearchFormModel.ActionAssociateDockerShow = ActionAssociateDockerShow;
  960. class ActionAssociateDockerHide extends Action {
  961. constructor(Selector) {
  962. super(Selector);
  963. }
  964. execute(event) {
  965. let $associateDocker = this.Selecor.$associateDocker;
  966. $associateDocker.css("opacity", "0");
  967. setTimeout(() => {
  968. $associateDocker.hide().css("opacity", "1");
  969. }, 200);
  970. }
  971. }
  972. SearchFormModel.ActionAssociateDockerHide = ActionAssociateDockerHide;
  973. class ActionAssociateSimilar extends Action {
  974. constructor(Selector) {
  975. super(Selector);
  976. this.Associate = new AssociateManager(new SearchFormModel.UpdateAssociateItem(Selector));
  977. }
  978. execute(event) {
  979. let inputValue = this.Selecor.$input.val();
  980. this.Associate.search(inputValue);
  981. }
  982. }
  983. SearchFormModel.ActionAssociateSimilar = ActionAssociateSimilar;
  984. class ActionSearchSelf extends Action {
  985. constructor(Selector) {
  986. super(Selector);
  987. }
  988. execute(event) {
  989. let inputValue = String(this.getInputValue()).trim();
  990. if (inputValue != "") {
  991. new BaiduSearch().addSearchKeyword(inputValue)
  992. .addBaiduDeaultParam()
  993. .openWebWithCurrentWindow();
  994. }
  995. }
  996. }
  997. SearchFormModel.ActionSearchSelf = ActionSearchSelf;
  998. class ActionSearchBlank extends Action {
  999. constructor(Selector) {
  1000. super(Selector);
  1001. }
  1002. execute(event) {
  1003. let inputValue = this.getInputValue().trim();
  1004. if (inputValue != "") {
  1005. new BaiduSearch().addSearchKeyword(inputValue)
  1006. .addBaiduDeaultParam()
  1007. .openWebWithCurrentWindow();
  1008. }
  1009. }
  1010. }
  1011. SearchFormModel.ActionSearchBlank = ActionSearchBlank;
  1012. class ActionAssociateItemScrollUp extends Action {
  1013. constructor(Selector) {
  1014. super(Selector);
  1015. this.ScrollAssociateItem = new SearchFormModel.ScrollAssociateItem(Selector);
  1016. }
  1017. execute(event) {
  1018. this.ScrollAssociateItem.scrollUp();
  1019. }
  1020. }
  1021. SearchFormModel.ActionAssociateItemScrollUp = ActionAssociateItemScrollUp;
  1022. class ActionAssociateItemScrollDown extends Action {
  1023. constructor(Selector) {
  1024. super(Selector);
  1025. this.ScrollAssociateItem = new SearchFormModel.ScrollAssociateItem(Selector);
  1026. }
  1027. execute(event) {
  1028. this.ScrollAssociateItem.scrollDown();
  1029. }
  1030. }
  1031. SearchFormModel.ActionAssociateItemScrollDown = ActionAssociateItemScrollDown;
  1032. class ActionAssociatePanelHover extends Action {
  1033. constructor(Selector) {
  1034. super(Selector);
  1035. this.ScrollAssociateItem = new SearchFormModel.ScrollAssociateItem(Selector);
  1036. }
  1037. execute(event) {
  1038. this.ScrollAssociateItem.scrollHover();
  1039. }
  1040. }
  1041. SearchFormModel.ActionAssociatePanelHover = ActionAssociatePanelHover;
  1042. class ActionSetClickSelectedToInput extends Action {
  1043. constructor(Selector) {
  1044. super(Selector);
  1045. this.ScrollAssociateItem = new SearchFormModel.ScrollAssociateItem(Selector);
  1046. }
  1047. execute(event) {
  1048. this.ScrollAssociateItem.scrollHover();
  1049. }
  1050. }
  1051. SearchFormModel.ActionSetClickSelectedToInput = ActionSetClickSelectedToInput;
  1052. })(SearchFormModel || (SearchFormModel = {}));
  1053. (function (SearchFormModel) {
  1054. class Assistant {
  1055. constructor() {
  1056. this.SearchURL = new SearchFormModel.SearchURL();
  1057. this.Element = SearchFormModel.SimpleElement.getInstance();
  1058. }
  1059. setInputValueFromURL() {
  1060. let searchValue = this.SearchURL.getSearchValue();
  1061. $(this.Element.getSelectorBarboxInput()).val(searchValue);
  1062. }
  1063. setInputFocus() {
  1064. $(this.Element.getSelectorBarboxInput()).focus();
  1065. }
  1066. }
  1067. SearchFormModel.Assistant = Assistant;
  1068. })(SearchFormModel || (SearchFormModel = {}));
  1069. (function (SearchFormModel) {
  1070. class CheckElement {
  1071. constructor() {
  1072. this.Element = SearchFormModel.SimpleElement.getInstance();
  1073. }
  1074. hasSearchBox() {
  1075. return $(this.Element.getSelectorBdContainer()).length > 0;
  1076. }
  1077. }
  1078. SearchFormModel.CheckElement = CheckElement;
  1079. })(SearchFormModel || (SearchFormModel = {}));
  1080. (function (SearchFormModel) {
  1081. class Count {
  1082. constructor() {
  1083. this.index = -1;
  1084. }
  1085. getUpperLimit(size) {
  1086. return size - 1;
  1087. }
  1088. getLowerLimit() {
  1089. return 0;
  1090. }
  1091. add(size) {
  1092. let index = this.get();
  1093. const UPPER_LIMIT = this.getUpperLimit(size);
  1094. const LOWER_LIMIT = this.getLowerLimit();
  1095. const isOverUpperLimit = (++index) > UPPER_LIMIT;
  1096. if (isOverUpperLimit) {
  1097. index = LOWER_LIMIT;
  1098. }
  1099. this.set(index);
  1100. return this;
  1101. }
  1102. sub(size) {
  1103. let index = this.get();
  1104. const UPPER_LIMIT = this.getUpperLimit(size);
  1105. const LOWER_LIMIT = this.getLowerLimit();
  1106. const isLessLowerLimit = (--index) < LOWER_LIMIT;
  1107. if (isLessLowerLimit) {
  1108. index = UPPER_LIMIT;
  1109. }
  1110. this.set(index);
  1111. return this;
  1112. }
  1113. set(index) {
  1114. this.index = index;
  1115. return this;
  1116. }
  1117. get() {
  1118. return this.index;
  1119. }
  1120. reset() {
  1121. this.index = -1;
  1122. }
  1123. }
  1124. SearchFormModel.Count = Count;
  1125. class SimpleCount {
  1126. static getInstance() {
  1127. if (!this.Count) {
  1128. this.Count = new Count();
  1129. }
  1130. return this.Count;
  1131. }
  1132. ;
  1133. }
  1134. SearchFormModel.SimpleCount = SimpleCount;
  1135. })(SearchFormModel || (SearchFormModel = {}));
  1136. (function (SearchFormModel) {
  1137. class Docker {
  1138. createDocker(template) {
  1139. return $("<div>").append(template);
  1140. }
  1141. }
  1142. SearchFormModel.Docker = Docker;
  1143. })(SearchFormModel || (SearchFormModel = {}));
  1144. (function (SearchFormModel) {
  1145. class Element {
  1146. constructor() {
  1147. this.preClass = ".";
  1148. this.preId = "#";
  1149. this.bd_container = "bd-container-search";
  1150. this.bd_docker = "bd-docker";
  1151. this.barbox_panel = "bd-barbox-ul";
  1152. this.barbox_item = "bd-barbox-li";
  1153. this.barbox_center = "bd-barbox-center";
  1154. this.barbox_input = "bd-barbox-input";
  1155. this.barbox_button = "bd-barbox-button";
  1156. this.associate_panel = "bd-associate-ul";
  1157. this.associate_item = "bd-associate-li";
  1158. this.associate_selected = "bd-associate-selected";
  1159. }
  1160. getClass(name) {
  1161. return this.preClass + name;
  1162. }
  1163. getId(name) {
  1164. return this.preId + name;
  1165. }
  1166. getNameBdContainer() {
  1167. return this.bd_container;
  1168. }
  1169. getNameBdDocker() {
  1170. return this.bd_docker;
  1171. }
  1172. getNameBarboxPanel() {
  1173. return this.barbox_panel;
  1174. }
  1175. getNameBarboxItem() {
  1176. return this.barbox_item;
  1177. }
  1178. getNameBarboxCenter() {
  1179. return this.barbox_center;
  1180. }
  1181. getNameBarboxInput() {
  1182. return this.barbox_input;
  1183. }
  1184. getNameBarboxButton() {
  1185. return this.barbox_button;
  1186. }
  1187. getNameAssociatePanel() {
  1188. return this.associate_panel;
  1189. }
  1190. getNameAssociateItem() {
  1191. return this.associate_item;
  1192. }
  1193. getNameAssociateSelected() {
  1194. return this.associate_selected;
  1195. }
  1196. getSelectorBdContainer() {
  1197. return this.getClass(this.getNameBdContainer());
  1198. }
  1199. getSelectorBdDocker() {
  1200. return this.getClass(this.getNameBdDocker());
  1201. }
  1202. getSelectorBarboxPanel() {
  1203. return this.getClass(this.getNameBarboxPanel());
  1204. }
  1205. getSelectorBarboxItem() {
  1206. return this.getClass(this.getNameBarboxItem());
  1207. }
  1208. getSelectorBarboxInput() {
  1209. return this.getClass(this.getNameBarboxInput());
  1210. }
  1211. getSelectorBarboxButton() {
  1212. return this.getClass(this.getNameBarboxButton());
  1213. }
  1214. getSelectorAssociatePanel() {
  1215. return this.getClass(this.getNameAssociatePanel());
  1216. }
  1217. getSelectorAssociateItem() {
  1218. return this.getClass(this.getNameAssociateItem());
  1219. }
  1220. getSelectorAssociateSelected() {
  1221. return this.getClass(this.getNameAssociateSelected());
  1222. }
  1223. }
  1224. SearchFormModel.Element = Element;
  1225. class SimpleElement {
  1226. static getInstance() {
  1227. if (!this.instance) {
  1228. this.instance = new Element();
  1229. }
  1230. return this.instance;
  1231. }
  1232. ;
  1233. }
  1234. SearchFormModel.SimpleElement = SimpleElement;
  1235. })(SearchFormModel || (SearchFormModel = {}));
  1236. (function (SearchFormModel) {
  1237. class Event {
  1238. constructor(Selector) {
  1239. this.Selecor = Selector;
  1240. }
  1241. isKeyDown(keyCode) {
  1242. return keyCode === 40;
  1243. }
  1244. isKeyUp(keyCode) {
  1245. return keyCode === 38;
  1246. }
  1247. isKeyEnter(keyCode) {
  1248. return keyCode === 13;
  1249. }
  1250. }
  1251. SearchFormModel.Event = Event;
  1252. class EventInputFocus extends Event {
  1253. constructor(Selector) {
  1254. super(Selector);
  1255. }
  1256. listen(action) {
  1257. this.Selecor.$input.on("focus", (event) => {
  1258. action.execute(event);
  1259. return false;
  1260. });
  1261. }
  1262. }
  1263. SearchFormModel.EventInputFocus = EventInputFocus;
  1264. class EventInputBlur extends Event {
  1265. constructor(Selector) {
  1266. super(Selector);
  1267. }
  1268. listen(action) {
  1269. this.Selecor.$input.on("blur", (event) => {
  1270. action.execute(event);
  1271. return false;
  1272. });
  1273. }
  1274. }
  1275. SearchFormModel.EventInputBlur = EventInputBlur;
  1276. class EventInputKeyDownWithDown extends Event {
  1277. constructor(Selector) {
  1278. super(Selector);
  1279. }
  1280. listen(action) {
  1281. this.Selecor.$input.on("keydown", (event) => {
  1282. let keyCode = event.keyCode || event.which || event.charCode;
  1283. if (this.isKeyDown(keyCode)) {
  1284. action.execute(event);
  1285. return false;
  1286. }
  1287. });
  1288. }
  1289. }
  1290. SearchFormModel.EventInputKeyDownWithDown = EventInputKeyDownWithDown;
  1291. class EventInputKeyDownWithUp extends Event {
  1292. constructor(Selector) {
  1293. super(Selector);
  1294. }
  1295. listen(action) {
  1296. this.Selecor.$input.on("keydown", (event) => {
  1297. let keyCode = event.keyCode || event.which || event.charCode;
  1298. if (this.isKeyUp(keyCode)) {
  1299. action.execute(event);
  1300. return false;
  1301. }
  1302. });
  1303. }
  1304. }
  1305. SearchFormModel.EventInputKeyDownWithUp = EventInputKeyDownWithUp;
  1306. class EventInputKeyDownWithEnter extends Event {
  1307. constructor(Selector) {
  1308. super(Selector);
  1309. }
  1310. listen(action) {
  1311. this.Selecor.$input.on("keydown", (event) => {
  1312. let keyCode = event.keyCode || event.which || event.charCode;
  1313. if (this.isKeyEnter(keyCode)) {
  1314. action.execute(event);
  1315. return false;
  1316. }
  1317. });
  1318. }
  1319. }
  1320. SearchFormModel.EventInputKeyDownWithEnter = EventInputKeyDownWithEnter;
  1321. class EventInputChange extends Event {
  1322. constructor(Selector) {
  1323. super(Selector);
  1324. }
  1325. listen(action) {
  1326. this.Selecor.$input.off("input propertychange").on("input propertychange", (event) => {
  1327. action.execute(event);
  1328. return false;
  1329. });
  1330. }
  1331. }
  1332. SearchFormModel.EventInputChange = EventInputChange;
  1333. class EventButtonClick extends Event {
  1334. constructor(Selector) {
  1335. super(Selector);
  1336. }
  1337. listen(action) {
  1338. this.Selecor.$button.on("click", (event) => {
  1339. action.execute(event);
  1340. return false;
  1341. });
  1342. }
  1343. }
  1344. SearchFormModel.EventButtonClick = EventButtonClick;
  1345. class EventAssociatePanelMouseMove extends Event {
  1346. constructor(Selector) {
  1347. super(Selector);
  1348. }
  1349. listen(action) {
  1350. this.Selecor.$associatePanel.on("mousemove", (event) => {
  1351. action.execute(event);
  1352. return false;
  1353. });
  1354. }
  1355. }
  1356. SearchFormModel.EventAssociatePanelMouseMove = EventAssociatePanelMouseMove;
  1357. class EventAssociatePanelMouseEnter extends Event {
  1358. constructor(Selector) {
  1359. super(Selector);
  1360. }
  1361. listen(action) {
  1362. this.Selecor.$associatePanel.on("mouseenter", (event) => {
  1363. action.execute(event);
  1364. return false;
  1365. });
  1366. }
  1367. }
  1368. SearchFormModel.EventAssociatePanelMouseEnter = EventAssociatePanelMouseEnter;
  1369. class EventAssociatePanelClick extends Event {
  1370. constructor(Selector) {
  1371. super(Selector);
  1372. }
  1373. listen(action) {
  1374. this.Selecor.$associatePanel.on("click", (event) => {
  1375. action.execute(event);
  1376. return false;
  1377. });
  1378. }
  1379. }
  1380. SearchFormModel.EventAssociatePanelClick = EventAssociatePanelClick;
  1381. })(SearchFormModel || (SearchFormModel = {}));
  1382. (function (SearchFormModel) {
  1383. class ScrollAssociateItem {
  1384. constructor(Selector) {
  1385. this.Count = SearchFormModel.SimpleCount.getInstance();
  1386. this.Element = SearchFormModel.SimpleElement.getInstance();
  1387. this.Selector = Selector;
  1388. }
  1389. search(content) {
  1390. let baiduSearch = new BaiduSearch();
  1391. baiduSearch.addSearchKeyword(content)
  1392. .addBaiduDeaultParam()
  1393. .openWebWithCurrentWindow();
  1394. }
  1395. getItems() {
  1396. return this.Selector.$associatePanel.find(this.Element.getSelectorAssociateItem());
  1397. }
  1398. getItemsSize(items) {
  1399. return !!items ? items.length : 0;
  1400. }
  1401. setIputValue(associateValue) {
  1402. this.Selector.$input.val(associateValue);
  1403. }
  1404. ScrollItem($items) {
  1405. let index = this.Count.get();
  1406. let setClassNameWithScorll = () => {
  1407. let nameItemSelected = this.Element.getNameAssociateSelected();
  1408. $items.removeClass(nameItemSelected);
  1409. $items.eq(index).addClass(nameItemSelected);
  1410. };
  1411. let setInputValue = () => {
  1412. let associateValue = $items.eq(index).attr("value");
  1413. this.setIputValue(associateValue);
  1414. };
  1415. setClassNameWithScorll();
  1416. setInputValue();
  1417. }
  1418. scrollUp() {
  1419. let items = this.getItems();
  1420. let size = this.getItemsSize(items);
  1421. this.Count.sub(size);
  1422. this.ScrollItem(items);
  1423. }
  1424. scrollDown() {
  1425. let items = this.getItems();
  1426. let size = this.getItemsSize(items);
  1427. this.Count.add(size);
  1428. this.ScrollItem(items);
  1429. }
  1430. scrollHover_backup() {
  1431. let $items = this.getItems();
  1432. let nameItemHover = this.Element.getNameAssociateSelected();
  1433. let lengthItems = $items.length;
  1434. let isEmptyItems = lengthItems <= 0;
  1435. if (isEmptyItems)
  1436. return;
  1437. let setClassNameWithHover = (event) => {
  1438. let target = event.target;
  1439. $items.removeClass(nameItemHover);
  1440. if (target.nodeName.toUpperCase() == "LI") {
  1441. target.classList.add(nameItemHover);
  1442. }
  1443. if (target.nodeName.toUpperCase() == "SPAN") {
  1444. target.parentNode.classList.add(nameItemHover);
  1445. }
  1446. };
  1447. let setInputValue = () => {
  1448. $items.each((index, item) => {
  1449. let $item = $(item);
  1450. if ($item.hasClass(nameItemHover)) {
  1451. let itemValue = $item.attr("value");
  1452. this.setIputValue(itemValue);
  1453. this.Count.set(index);
  1454. }
  1455. });
  1456. };
  1457. setClassNameWithHover(event);
  1458. setInputValue();
  1459. }
  1460. scrollHover() {
  1461. let that = this;
  1462. let $items = this.getItems();
  1463. let nameItemHover = this.Element.getNameAssociateSelected();
  1464. let lengthItems = $items.length;
  1465. let isEmptyItems = lengthItems <= 0;
  1466. if (isEmptyItems)
  1467. return;
  1468. $items.off("mouseleave").on("mouseleave", function () {
  1469. let $item = $(this);
  1470. $item.removeClass(nameItemHover);
  1471. });
  1472. $items.off("mouseenter").on("mouseenter", function () {
  1473. let $item = $(this);
  1474. $items.removeClass(nameItemHover);
  1475. $item.addClass(nameItemHover);
  1476. });
  1477. $items.off("click").on("click", function () {
  1478. let $item = $(this);
  1479. let searchContent = String($item.attr("value"));
  1480. that.search(searchContent.trim());
  1481. });
  1482. }
  1483. }
  1484. SearchFormModel.ScrollAssociateItem = ScrollAssociateItem;
  1485. })(SearchFormModel || (SearchFormModel = {}));
  1486. (function (SearchFormModel) {
  1487. class SearchURL {
  1488. getSearchValue() {
  1489. let currentURL = new URL(location.href);
  1490. let searchValue = currentURL.searchParams.get("wd");
  1491. return searchValue !== null ? decodeURIComponent(searchValue) : "";
  1492. }
  1493. }
  1494. SearchFormModel.SearchURL = SearchURL;
  1495. })(SearchFormModel || (SearchFormModel = {}));
  1496. (function (SearchFormModel) {
  1497. class Selector {
  1498. constructor($docker) {
  1499. this.Element = new SearchFormModel.Element();
  1500. this.$docker = $docker;
  1501. this.$input = this.search(this.Element.getSelectorBarboxInput());
  1502. this.$button = this.search(this.Element.getSelectorBarboxButton());
  1503. this.$associateDocker = this.search(this.Element.getSelectorBdDocker()).eq(1);
  1504. this.$associatePanel = this.search(this.Element.getSelectorAssociatePanel());
  1505. }
  1506. search(selectorName) {
  1507. return this.$docker.find(selectorName);
  1508. }
  1509. }
  1510. SearchFormModel.Selector = Selector;
  1511. })(SearchFormModel || (SearchFormModel = {}));
  1512. (function (SearchFormModel) {
  1513. class Template {
  1514. constructor() {
  1515. this.Element = SearchFormModel.SimpleElement.getInstance();
  1516. }
  1517. }
  1518. class TemplateSearchBox extends Template {
  1519. getTempalteSearchBar() {
  1520. let nameBarboxPanel = this.Element.getNameBarboxPanel();
  1521. let nameBarboxItem = this.Element.getNameBarboxItem();
  1522. let nameBarboxCenter = this.Element.getNameBarboxCenter();
  1523. let nameBarboxInput = this.Element.getNameBarboxInput();
  1524. let nameBarboxButton = this.Element.getNameBarboxButton();
  1525. return `
  1526. <div class="${nameBarboxPanel}">
  1527. <div class="${nameBarboxCenter}">
  1528. <div class="${nameBarboxItem}"><input class="${nameBarboxInput}" type="text" maxlength="255" autocomplete="off"></div>
  1529. <div class="${nameBarboxItem}"><button class="${nameBarboxButton}">百度一下</button></div>
  1530. </div>
  1531. </div>
  1532. `;
  1533. }
  1534. getTempalteAssociatePanel() {
  1535. let nameAssociatePanel = this.Element.getNameAssociatePanel();
  1536. return `
  1537. <ul class="${nameAssociatePanel}"></ul>
  1538. `;
  1539. }
  1540. create() {
  1541. let nameBdContainer = this.Element.getNameBdContainer();
  1542. let nameBdDocker = this.Element.getNameBdDocker();
  1543. return `
  1544. <div class="${nameBdContainer}">
  1545. <div class="${nameBdDocker}">${this.getTempalteSearchBar()}</div>
  1546. <div class="${nameBdDocker} bd-none">${this.getTempalteAssociatePanel()}</div>
  1547. </div>
  1548. `;
  1549. }
  1550. }
  1551. SearchFormModel.TemplateSearchBox = TemplateSearchBox;
  1552. class TemplateAssociateItem extends Template {
  1553. create() {
  1554. let nameAssociateItem = this.Element.getNameAssociateItem();
  1555. return `
  1556. <li class="${nameAssociateItem}"></li>
  1557. `;
  1558. }
  1559. }
  1560. SearchFormModel.TemplateAssociateItem = TemplateAssociateItem;
  1561. })(SearchFormModel || (SearchFormModel = {}));
  1562. (function (SearchFormModel) {
  1563. class UpdateAssociateItem {
  1564. constructor(Selector) {
  1565. this.Count = SearchFormModel.SimpleCount.getInstance();
  1566. this.TemplateAssociateItem = new SearchFormModel.TemplateAssociateItem();
  1567. this.Selector = Selector;
  1568. }
  1569. getCurrentInputVaule() {
  1570. return this.Selector.$input.val().trim();
  1571. }
  1572. createTempateItem(inputValue, itemValue) {
  1573. let pathValue = itemValue.replace(inputValue, "");
  1574. let templateItem = this.TemplateAssociateItem.create();
  1575. let $item = $(templateItem);
  1576. $item.attr("value", itemValue);
  1577. $item.html(`<span>${itemValue}</span>`);
  1578. return $item.prop("outerHTML");
  1579. }
  1580. combineItemsTempate(items) {
  1581. let template = "";
  1582. let inputValue = this.getCurrentInputVaule();
  1583. items.forEach((itemValue) => {
  1584. if (itemValue === "") {
  1585. template += "";
  1586. }
  1587. else {
  1588. template += this.createTempateItem(inputValue, itemValue);
  1589. }
  1590. });
  1591. return template;
  1592. }
  1593. isNotEmptyItems(items) {
  1594. return !!items;
  1595. }
  1596. clearAssoicateOldItems() {
  1597. this.Selector.$associatePanel.empty();
  1598. }
  1599. resetCount() {
  1600. this.Count.reset();
  1601. }
  1602. insertItemsToPanel(items) {
  1603. let itemsTemplate = this.combineItemsTempate(items);
  1604. this.Selector.$associatePanel.append(itemsTemplate);
  1605. }
  1606. update(items) {
  1607. this.clearAssoicateOldItems();
  1608. this.resetCount();
  1609. if (this.isNotEmptyItems(items)) {
  1610. this.insertItemsToPanel(items);
  1611. }
  1612. }
  1613. }
  1614. SearchFormModel.UpdateAssociateItem = UpdateAssociateItem;
  1615. })(SearchFormModel || (SearchFormModel = {}));
  1616. let MenuModel;
  1617. (function (MenuModel) {
  1618. MenuModel.MenuConfig = {
  1619. DISABLE_NAME: "bd-none",
  1620. CUSTOM_BUTTON_NAME: "bd-menu-btn",
  1621. CUSTOM_DETIALS_PANEL_NAME: "bd-menu-detilas",
  1622. OPTION_SELECT_NAME: "bd-page-select",
  1623. OPTION_SWITCH_NAME: "bd-page-switch",
  1624. OPTION_SAVE_NAME: "bd_menu_save",
  1625. OPTION_SILDER_BAR_TAG_NAME: "bd-page-silderBar",
  1626. };
  1627. })(MenuModel || (MenuModel = {}));
  1628. (function (MenuModel) {
  1629. class MenuData {
  1630. constructor() {
  1631. this.MenuConfig = MenuModel.MenuConfig;
  1632. }
  1633. getCurrentPageSelectLayout() {
  1634. return 1;
  1635. }
  1636. }
  1637. MenuModel.MenuData = MenuData;
  1638. })(MenuModel || (MenuModel = {}));
  1639. (function (MenuModel) {
  1640. class MenuElement {
  1641. constructor() {
  1642. this.Template = new MenuModel.MenuTemplate();
  1643. this.PageLayoutOption = new PageLayoutOption();
  1644. this.SilderBarOption = new SilderBarOption();
  1645. }
  1646. getSwitchContent(showContent, o) {
  1647. return this.Template.getContentFunctionSwitch(showContent, o.isEnable(), o.getFunctionName());
  1648. }
  1649. getMenuPageSelectContent() {
  1650. let currentType = this.PageLayoutOption.getCurrentPageType();
  1651. let content = "";
  1652. content += "<ol>页面选择";
  1653. content += this.Template.getContentPageSelect("普通页面", LAYOUT_TYPE.General, currentType);
  1654. content += this.Template.getContentPageSelect("单页居中", LAYOUT_TYPE.OneCenter, currentType);
  1655. content += this.Template.getContentPageSelect("双页居中", LAYOUT_TYPE.TwoCenter, currentType);
  1656. content += this.Template.getContentPageSelect("三页居中", LAYOUT_TYPE.ThreeCenter, currentType);
  1657. content += "</ol>";
  1658. return content;
  1659. }
  1660. getMenuPageFunctionSwitchContent() {
  1661. let content = "";
  1662. content += "<ol>功能选择";
  1663. content += this.getSwitchContent("自动下一页", new AutoNextPageSwitch());
  1664. content += this.getSwitchContent("开启侧边栏", new SideToolBarSwitch());
  1665. content += "</ol>";
  1666. return content;
  1667. }
  1668. getMenuSaveButtonConent(saveButtonName) {
  1669. let content = "";
  1670. content += "<ol>";
  1671. content += `<input id="${saveButtonName}" type = "button" value = "保存" >`;
  1672. content += "</ol>";
  1673. return content;
  1674. }
  1675. getMenuCustomButtonHTML(buttonName) {
  1676. return `<a id=${buttonName}>自定义</a>`;
  1677. }
  1678. getMenuPageSliderBar() {
  1679. let currentMode = this.SilderBarOption.getCurrentMode();
  1680. let content = "";
  1681. content += "<ol>页面选择";
  1682. content += this.Template.getContentSilderBar("自动", SILTER_BAR_MODE.auto, currentMode);
  1683. content += this.Template.getContentSilderBar("显示", SILTER_BAR_MODE.show, currentMode);
  1684. content += this.Template.getContentSilderBar("隐藏", SILTER_BAR_MODE.hidden, currentMode);
  1685. content += "</ol>";
  1686. return content;
  1687. }
  1688. getMenuDetialPanelHTML(detialPanelName, saveButtonName) {
  1689. return `<div id="${detialPanelName}">
  1690. <div class="bt-menu-piece">
  1691. ${this.getMenuPageSelectContent()}
  1692. ${this.getMenuPageFunctionSwitchContent()}
  1693. ${this.getMenuSaveButtonConent(saveButtonName)}
  1694. </div>
  1695. </div>`;
  1696. }
  1697. }
  1698. MenuModel.MenuElement = MenuElement;
  1699. })(MenuModel || (MenuModel = {}));
  1700. (function (MenuModel) {
  1701. class MenuEvent {
  1702. constructor() {
  1703. this.MenuConfig = MenuModel.MenuConfig;
  1704. this.UserConfigManager = new UserConfigManager();
  1705. }
  1706. refreshWeb() {
  1707. location.href = location.href;
  1708. }
  1709. saveUserConfig() {
  1710. this.UserConfigManager.savePageLayoutSelected();
  1711. this.UserConfigManager.saveAdditionFuction();
  1712. this.refreshWeb();
  1713. }
  1714. bindSaveEvent() {
  1715. let saveID = "#" + this.MenuConfig.OPTION_SAVE_NAME;
  1716. let $save = $(saveID);
  1717. $save.off("click").on("click", this, () => {
  1718. $save.off("click");
  1719. this.saveUserConfig();
  1720. return false;
  1721. });
  1722. }
  1723. bindCustonEvent() {
  1724. let customButtonID = "#" + this.MenuConfig.CUSTOM_BUTTON_NAME;
  1725. let detialsPanelID = "#" + this.MenuConfig.CUSTOM_DETIALS_PANEL_NAME;
  1726. let $customButton = $(customButtonID);
  1727. let $detialsPanel = $(detialsPanelID);
  1728. let hiddenName = this.MenuConfig.DISABLE_NAME;
  1729. $customButton.off("click").on("click", (e) => {
  1730. $detialsPanel.toggleClass(hiddenName);
  1731. return false;
  1732. });
  1733. }
  1734. hideDetailPanel() {
  1735. let detialsPanelID = "#" + this.MenuConfig.CUSTOM_DETIALS_PANEL_NAME;
  1736. let $detialsPanel = $(detialsPanelID);
  1737. let hiddenName = this.MenuConfig.DISABLE_NAME;
  1738. $detialsPanel.addClass(hiddenName);
  1739. }
  1740. blurClickHideDetailPanel() {
  1741. let detialsPanelID = "#" + this.MenuConfig.CUSTOM_DETIALS_PANEL_NAME;
  1742. let rule = `:not(${detialsPanelID})`;
  1743. $("#container").off("click").on('click', rule, () => {
  1744. this.hideDetailPanel();
  1745. });
  1746. }
  1747. }
  1748. MenuModel.MenuEvent = MenuEvent;
  1749. class UserConfigManager {
  1750. constructor() {
  1751. this.MenuConfig = MenuModel.MenuConfig;
  1752. this.PageLayoutOption = new PageLayoutOption();
  1753. this.AutoNextPageSwitch = new AutoNextPageSwitch();
  1754. this.SideToolBarSwitch = new SideToolBarSwitch();
  1755. }
  1756. savePageLayoutSelected() {
  1757. let that = this;
  1758. let containerRule = `#${this.MenuConfig.CUSTOM_DETIALS_PANEL_NAME}`;
  1759. let radioRule = `input[name=${this.MenuConfig.OPTION_SELECT_NAME}]`;
  1760. let $radios = $(containerRule).find(radioRule);
  1761. $radios.each(function (index, element) {
  1762. let $radio = $(this);
  1763. if ($radio.prop('checked')) {
  1764. let option = Number($radio.attr("value"));
  1765. switch (option) {
  1766. case LAYOUT_TYPE.General:
  1767. that.PageLayoutOption.setPageLayoutType(LAYOUT_TYPE.General);
  1768. break;
  1769. case LAYOUT_TYPE.OneCenter:
  1770. that.PageLayoutOption.setPageLayoutType(LAYOUT_TYPE.OneCenter);
  1771. break;
  1772. case LAYOUT_TYPE.TwoCenter:
  1773. that.PageLayoutOption.setPageLayoutType(LAYOUT_TYPE.TwoCenter);
  1774. break;
  1775. case LAYOUT_TYPE.ThreeCenter:
  1776. that.PageLayoutOption.setPageLayoutType(LAYOUT_TYPE.ThreeCenter);
  1777. break;
  1778. default:
  1779. that.PageLayoutOption.setPageLayoutType(LAYOUT_TYPE.General);
  1780. break;
  1781. }
  1782. return;
  1783. }
  1784. });
  1785. }
  1786. saveAdditionFuction() {
  1787. let that = this;
  1788. let containerRule = `#${this.MenuConfig.CUSTOM_DETIALS_PANEL_NAME}`;
  1789. let switchRule = `input[name=${this.MenuConfig.OPTION_SWITCH_NAME}]`;
  1790. let $switchs = $(containerRule).find(switchRule);
  1791. $switchs.each(function (index, element) {
  1792. let $selector = $(this);
  1793. let functionName = Number($selector.attr("value"));
  1794. if (functionName == ADDITION_FUNCTION.AutoNextPage) {
  1795. if ($selector.prop('checked')) {
  1796. that.AutoNextPageSwitch.enable();
  1797. }
  1798. else {
  1799. that.AutoNextPageSwitch.disable();
  1800. }
  1801. }
  1802. if (functionName == ADDITION_FUNCTION.SideToolBar) {
  1803. if ($selector.prop('checked')) {
  1804. that.SideToolBarSwitch.enable();
  1805. }
  1806. else {
  1807. that.SideToolBarSwitch.disable();
  1808. }
  1809. }
  1810. });
  1811. }
  1812. }
  1813. MenuModel.UserConfigManager = UserConfigManager;
  1814. })(MenuModel || (MenuModel = {}));
  1815. (function (MenuModel) {
  1816. class MenuTemplate {
  1817. constructor() {
  1818. this.MenuConfig = MenuModel.MenuConfig;
  1819. }
  1820. getContentPageSelect(content, layoutType, currentlayoutType) {
  1821. let checked = layoutType === currentlayoutType ? "checked" : "";
  1822. return `<li><input type="radio" name="${this.MenuConfig.OPTION_SELECT_NAME}" value="${layoutType}" ${checked}>${content}</li>`;
  1823. }
  1824. getContentFunctionSwitch(showContent, isEnable, additionFuntionName) {
  1825. let checked = isEnable ? "checked" : "";
  1826. return `<li><input type="checkbox" name="${this.MenuConfig.OPTION_SWITCH_NAME}" value="${additionFuntionName}" ${checked}>${showContent}</li>`;
  1827. }
  1828. getContentSilderBar(showText, mode, currentMode) {
  1829. let checked = (mode === currentMode) ? "checked" : "";
  1830. return `<li><input type="radio" name="${this.MenuConfig.OPTION_SILDER_BAR_TAG_NAME}" value="${mode}" ${checked}>${showText}</li>`;
  1831. }
  1832. }
  1833. MenuModel.MenuTemplate = MenuTemplate;
  1834. })(MenuModel || (MenuModel = {}));
  1835. let SearchResult;
  1836. (function (SearchResult) {
  1837. class Cache {
  1838. constructor() {
  1839. this.caches = [];
  1840. }
  1841. hasCache() {
  1842. return (this.caches.length > 0) ? true : false;
  1843. }
  1844. getCache() {
  1845. return this.caches.shift();
  1846. }
  1847. add(content) {
  1848. this.caches.push(content);
  1849. }
  1850. }
  1851. SearchResult.Cache = Cache;
  1852. })(SearchResult || (SearchResult = {}));
  1853. (function (SearchResult) {
  1854. SearchResult.Configs = {
  1855. tplBlackLists: [
  1856. "med_qa",
  1857. "bjh_addressing",
  1858. "recommend_list",
  1859. "ads_b2c_universal_card",
  1860. "sp_hot_sale",
  1861. "b2b_straight",
  1862. "b2b_factory2",
  1863. "vmp_zxenterprise_new",
  1864. "short_video",
  1865. ]
  1866. };
  1867. })(SearchResult || (SearchResult = {}));
  1868. (function (SearchResult) {
  1869. class Fetch {
  1870. constructor() {
  1871. this.configs = SearchResult.Configs;
  1872. this.Cache = new SearchResult.Cache();
  1873. this.BaiduUrl = new UrlEditor(location.href);
  1874. this.count = 0;
  1875. this.request();
  1876. }
  1877. getNextPageURL() {
  1878. this.Search = new BaiduSearch();
  1879. this.Search.addSearchKeyword(this.BaiduUrl.getParamValue("wd"));
  1880. this.Search.addPN(this.count);
  1881. this.count += 30;
  1882. this.Search.addRN(30);
  1883. return this.Search.getFinalURL();
  1884. }
  1885. request() {
  1886. let url = this.getNextPageURL();
  1887. GM.xmlhttpRequest({
  1888. method: "GET",
  1889. url: url,
  1890. timeout: 3000,
  1891. responseType: "text",
  1892. headers: {
  1893. "User-Agent": navigator.userAgent,
  1894. "Cookie": document.cookie,
  1895. },
  1896. onload: (response) => {
  1897. if (response.status === 200 ||
  1898. response.status === 304) {
  1899. this.Cache.add(response.responseText);
  1900. }
  1901. },
  1902. onerror: (response) => {
  1903. console.error(response);
  1904. }
  1905. });
  1906. }
  1907. run() {
  1908. this.request();
  1909. if (this.Cache.hasCache()) {
  1910. return this.Cache.getCache();
  1911. }
  1912. else {
  1913. return "";
  1914. }
  1915. }
  1916. }
  1917. SearchResult.Fetch = Fetch;
  1918. })(SearchResult || (SearchResult = {}));
  1919. (function (SearchResult) {
  1920. class Filter {
  1921. constructor() {
  1922. this.config = SearchResult.Configs;
  1923. }
  1924. isAds(item) {
  1925. let id = item.attr("id");
  1926. if (id == "1") {
  1927. let items = $(item).find(".se_st_footer>a");
  1928. for (let i = 0, item; item = items[i++];) {
  1929. if ($(item).text() == "广告") {
  1930. return true;
  1931. }
  1932. }
  1933. }
  1934. return false;
  1935. }
  1936. isDryTpl(item) {
  1937. let tplCurrentContent = item.attr("tpl");
  1938. for (let tplBlackContent of this.config.tplBlackLists) {
  1939. if (tplBlackContent === tplCurrentContent) {
  1940. return true;
  1941. }
  1942. }
  1943. return false;
  1944. }
  1945. isWhiteItem(item) {
  1946. let isRemove = false;
  1947. if (!isRemove) {
  1948. isRemove = this.isAds(item);
  1949. }
  1950. if (!isRemove) {
  1951. isRemove = this.isDryTpl(item);
  1952. }
  1953. return isRemove ? false : true;
  1954. }
  1955. RemoveDryItem(items) {
  1956. let temp = [];
  1957. for (let i = 0, item; item = items[i++];) {
  1958. let $item = $(item);
  1959. let isNormal = this.isWhiteItem($item);
  1960. if (!isNormal) {
  1961. $item.remove();
  1962. continue;
  1963. }
  1964. temp.push(item);
  1965. }
  1966. return $(temp);
  1967. }
  1968. run(items) {
  1969. return this.RemoveDryItem(items);
  1970. }
  1971. }
  1972. SearchResult.Filter = Filter;
  1973. })(SearchResult || (SearchResult = {}));
  1974. (function (SearchResult) {
  1975. class Manager {
  1976. constructor() {
  1977. this.Filter = new SearchResult.Filter();
  1978. this.Fetch = new SearchResult.Fetch();
  1979. }
  1980. filterInvalidSearchResult(items) {
  1981. return this.Filter.run(items);
  1982. }
  1983. getCurrentPageSerachResult() {
  1984. let items = $("#content_left>div[id]");
  1985. return this.filterInvalidSearchResult(items);
  1986. }
  1987. getNextPageSearchResult() {
  1988. this.Fetch.run();
  1989. }
  1990. run() {
  1991. console.log("SearchResultManager");
  1992. this.getNextPageSearchResult();
  1993. }
  1994. }
  1995. SearchResult.Manager = Manager;
  1996. })(SearchResult || (SearchResult = {}));
  1997. let SideToolBarModel;
  1998. (function (SideToolBarModel) {
  1999. SideToolBarModel.Configs = {
  2000. SIDEBAR_NAME: "bd_sidebar",
  2001. };
  2002. })(SideToolBarModel || (SideToolBarModel = {}));
  2003. (function (SideToolBarModel) {
  2004. class Element {
  2005. constructor() {
  2006. this.Configs = SideToolBarModel.Configs;
  2007. this.SIDEBAR_TOOLBAR_ITEMS = SIDEBAR_TOOLBAR_ITEMS;
  2008. }
  2009. getSiderbarItemsContent() {
  2010. let content = "";
  2011. for (let [name, value] of Object.entries(this.SIDEBAR_TOOLBAR_ITEMS)) {
  2012. content += `<li value=${value}>${name}</li>`;
  2013. }
  2014. return content;
  2015. }
  2016. getContainerHTML() {
  2017. return `
  2018. <div id="${this.Configs.SIDEBAR_NAME}">
  2019. </div>
  2020. `;
  2021. }
  2022. getItemsHTML() {
  2023. return `
  2024. <ol>
  2025. ${this.getSiderbarItemsContent()}
  2026. </ol>
  2027. `;
  2028. }
  2029. getSignHTML() {
  2030. return `<div class="bd_siderbar_sign">
  2031. <div class="box">
  2032. <div class="chevron"></div>
  2033. <div class="chevron"></div>
  2034. <div class="chevron"></div>
  2035. </div>
  2036. </div>`;
  2037. }
  2038. }
  2039. SideToolBarModel.Element = Element;
  2040. })(SideToolBarModel || (SideToolBarModel = {}));
  2041. (function (SideToolBarModel) {
  2042. class SideToolBar {
  2043. constructor() {
  2044. this.Element = new SideToolBarModel.Element();
  2045. }
  2046. useThirdSearch(event) {
  2047. let $target = $(event.target);
  2048. let templateURL = String($target.attr("value"));
  2049. let searchContent = new UrlEditor(location.href).getParamValue("wd").trim();
  2050. searchContent = decodeURIComponent(searchContent);
  2051. let finalURL = templateURL.replace("%s", encodeURIComponent(searchContent));
  2052. location.href = finalURL;
  2053. }
  2054. bindClickEvent($selector) {
  2055. $selector.off("click").on("click", "li", (event) => {
  2056. this.useThirdSearch(event);
  2057. return false;
  2058. });
  2059. }
  2060. getSideToolBar() {
  2061. let containerHTML = this.Element.getContainerHTML();
  2062. let itemsHTML = this.Element.getItemsHTML();
  2063. let $container = $(containerHTML);
  2064. let $items = $(itemsHTML);
  2065. $container.append($items);
  2066. this.bindClickEvent($container);
  2067. return $container;
  2068. }
  2069. }
  2070. SideToolBarModel.SideToolBar = SideToolBar;
  2071. })(SideToolBarModel || (SideToolBarModel = {}));
  2072. class IndexPageInjectStyles {
  2073. constructor() {
  2074. this.StyleContent = new StyleContent();
  2075. }
  2076. construct() {
  2077. }
  2078. start() {
  2079. let style = new StyleControl();
  2080. style.add(this.StyleContent.getStlyeForIndex());
  2081. style.end();
  2082. }
  2083. }
  2084. class ResultPageInjectStyles {
  2085. constructor() {
  2086. this.StyleContent = new StyleContent();
  2087. this.PageLayoutOption = new PageLayoutOption();
  2088. }
  2089. start() {
  2090. let style = new StyleControl();
  2091. let layoutType = this.PageLayoutOption.getCurrentPageType();
  2092. style.add(this.StyleContent.getStyleForBase());
  2093. style.add(this.StyleContent.getStyleForMenu());
  2094. style.add(this.StyleContent.getStyleForSidebar());
  2095. switch (layoutType) {
  2096. case LAYOUT_TYPE.OneCenter:
  2097. style.add(this.StyleContent.getStyleForLayoutOneCenter());
  2098. break;
  2099. case LAYOUT_TYPE.TwoCenter:
  2100. style.add(this.StyleContent.getStyleForLayoutTwoCenter());
  2101. break;
  2102. case LAYOUT_TYPE.ThreeCenter:
  2103. style.add(this.StyleContent.getStyleForLayoutThreeCenter());
  2104. break;
  2105. default:
  2106. break;
  2107. }
  2108. style.end();
  2109. }
  2110. }
  2111. class CustomMenu {
  2112. constructor() {
  2113. this.Template = new MenuModel.MenuElement();
  2114. this.MenuEvent = new MenuModel.MenuEvent();
  2115. this.MenuCustomButton = new MenuModel.MenuCustomButton(this.Template);
  2116. this.MenuDetialsPanel = new MenuModel.MenuCustomDetials(this.Template);
  2117. }
  2118. insertMenuCustomButton() {
  2119. if (!this.MenuCustomButton.hasCustomButton()) {
  2120. let $container = $("#u");
  2121. let div = this.MenuCustomButton.getCustomButtonHTML();
  2122. $container.prepend(div);
  2123. }
  2124. }
  2125. insertMenuDetailPanel() {
  2126. if (!this.MenuDetialsPanel.hasDetailsPanel()) {
  2127. let $container = $("#u");
  2128. let div = this.MenuDetialsPanel.getDetaialPanelHTML();
  2129. $container.append(div);
  2130. }
  2131. }
  2132. bindCustomButtonEvent() {
  2133. this.MenuEvent.bindCustonEvent();
  2134. }
  2135. bindSaveEvent() {
  2136. this.MenuEvent.bindSaveEvent();
  2137. }
  2138. blurClickHideDetailPanel() {
  2139. this.MenuEvent.blurClickHideDetailPanel();
  2140. }
  2141. hideDetailPanel() {
  2142. this.MenuEvent.hideDetailPanel();
  2143. }
  2144. start() {
  2145. this.insertMenuCustomButton();
  2146. this.insertMenuDetailPanel();
  2147. this.hideDetailPanel();
  2148. this.bindCustomButtonEvent();
  2149. this.bindSaveEvent();
  2150. this.blurClickHideDetailPanel();
  2151. }
  2152. }
  2153. (function (MenuModel) {
  2154. class MenuCustomButton {
  2155. constructor(Template) {
  2156. this.menuConfig = MenuModel.MenuConfig;
  2157. this.buttonName = this.menuConfig.CUSTOM_BUTTON_NAME;
  2158. this.buttonID = "#" + this.buttonName;
  2159. this.Template = Template;
  2160. }
  2161. getCustomButtonHTML() {
  2162. return this.Template.getMenuCustomButtonHTML(this.buttonName);
  2163. }
  2164. hasCustomButton() {
  2165. return $(this.buttonID).length > 0 ? true : false;
  2166. }
  2167. }
  2168. MenuModel.MenuCustomButton = MenuCustomButton;
  2169. })(MenuModel || (MenuModel = {}));
  2170. (function (MenuModel) {
  2171. class MenuCustomDetials {
  2172. constructor(Template) {
  2173. this.MenuConfig = MenuModel.MenuConfig;
  2174. this.Template = Template;
  2175. }
  2176. getDetaialPanelHTML() {
  2177. return this.Template.getMenuDetialPanelHTML(this.MenuConfig.CUSTOM_DETIALS_PANEL_NAME, this.MenuConfig.OPTION_SAVE_NAME);
  2178. }
  2179. hasDetailsPanel() {
  2180. let detailsPanelID = "#" + this.MenuConfig.CUSTOM_DETIALS_PANEL_NAME;
  2181. return $(detailsPanelID).length > 0 ? true : false;
  2182. }
  2183. }
  2184. MenuModel.MenuCustomDetials = MenuCustomDetials;
  2185. })(MenuModel || (MenuModel = {}));
  2186. class AddBingWallpaper {
  2187. start() {
  2188. let bingWallpater = new WallPaperModel.BingWallpaper();
  2189. bingWallpater.insertBingWallpaperNode();
  2190. }
  2191. }
  2192. (function (WallPaperModel) {
  2193. class BingWallpaper {
  2194. constructor() {
  2195. this.config = new WallPaperModel.WallpagerConfig();
  2196. this.isExcuteFlagName = "bd-BingWallpaper";
  2197. this.isExcuteFlagClassName = "." + this.isExcuteFlagName;
  2198. }
  2199. createBingWallpaperNode(imageUrl) {
  2200. let template = new WallPaperModel.Tempalte(this.config);
  2201. return template.createBingWallpaperNode(imageUrl);
  2202. }
  2203. getBingWallpaperNode() {
  2204. let images = new WallPaperModel.Images(new WallPaperModel.WallPaperBing());
  2205. let url = images.getImageURL();
  2206. return this.createBingWallpaperNode(url);
  2207. }
  2208. isExitNode() {
  2209. return $(this.isExcuteFlagClassName).length > 0;
  2210. }
  2211. insertBingWallpaperNode() {
  2212. if (!this.isExitNode()) {
  2213. let $node = $(this.getBingWallpaperNode());
  2214. $node.addClass(this.isExcuteFlagName);
  2215. $("body").append($node);
  2216. }
  2217. }
  2218. }
  2219. WallPaperModel.BingWallpaper = BingWallpaper;
  2220. })(WallPaperModel || (WallPaperModel = {}));
  2221. (function (SearchFormModel) {
  2222. class Control {
  2223. constructor() {
  2224. this.isNewWindowSearch = false;
  2225. this.Assistant = new SearchFormModel.Assistant();
  2226. this.$docker = this.createDocker();
  2227. this.Selector = new SearchFormModel.Selector(this.$docker);
  2228. }
  2229. createDocker() {
  2230. return new SearchFormModel.Docker().createDocker(new SearchFormModel.TemplateSearchBox().create());
  2231. }
  2232. hasSearchBoxAtDom() {
  2233. return new SearchFormModel.CheckElement().hasSearchBox();
  2234. }
  2235. bind(Event, Action) {
  2236. new Event(this.Selector).listen(new Action(this.Selector));
  2237. }
  2238. events() {
  2239. this.bind(SearchFormModel.EventInputFocus, SearchFormModel.ActionAssociateDockerShow);
  2240. this.bind(SearchFormModel.EventInputFocus, SearchFormModel.ActionAssociateSimilar);
  2241. this.bind(SearchFormModel.EventInputBlur, SearchFormModel.ActionAssociateDockerHide);
  2242. this.bind(SearchFormModel.EventInputChange, SearchFormModel.ActionAssociateSimilar);
  2243. this.bind(SearchFormModel.EventInputKeyDownWithUp, SearchFormModel.ActionAssociateItemScrollUp);
  2244. this.bind(SearchFormModel.EventInputKeyDownWithDown, SearchFormModel.ActionAssociateItemScrollDown);
  2245. this.bind(SearchFormModel.EventAssociatePanelMouseEnter, SearchFormModel.ActionAssociatePanelHover);
  2246. this.bind(SearchFormModel.EventInputKeyDownWithEnter, SearchFormModel.ActionSearchSelf);
  2247. this.bind(SearchFormModel.EventButtonClick, SearchFormModel.ActionSearchSelf);
  2248. }
  2249. insertDockerToDom(containerName) {
  2250. $(containerName).append(this.$docker);
  2251. }
  2252. setInputValueFromURL() {
  2253. this.Assistant.setInputValueFromURL();
  2254. }
  2255. setInputFocus() {
  2256. this.Assistant.setInputFocus();
  2257. }
  2258. setNewWindowSearch() {
  2259. this.isNewWindowSearch = true;
  2260. }
  2261. start(containerName) {
  2262. if (!this.hasSearchBoxAtDom()) {
  2263. this.events();
  2264. this.insertDockerToDom(containerName);
  2265. }
  2266. }
  2267. }
  2268. SearchFormModel.Control = Control;
  2269. class ConcreteControl extends Control {
  2270. constructor() {
  2271. super();
  2272. this.isInputValueFromURL = false;
  2273. this.isInputFocus = false;
  2274. }
  2275. executeCallback() {
  2276. for (const fn of this.callbacks) {
  2277. fn();
  2278. }
  2279. }
  2280. insertElementToDom() {
  2281. $(this.targetContainer).append();
  2282. }
  2283. setPageIndex() {
  2284. this.targetContainer = "#lg";
  2285. }
  2286. setPageResult() {
  2287. this.targetContainer = ".s_form";
  2288. }
  2289. setInputFocus() {
  2290. this.isInputFocus = true;
  2291. }
  2292. setInputValueFromURL() {
  2293. this.isInputValueFromURL = true;
  2294. }
  2295. setNewWindowSearch() {
  2296. super.setNewWindowSearch();
  2297. }
  2298. start() {
  2299. super.start(this.targetContainer);
  2300. if (!!this.isInputValueFromURL) {
  2301. super.setInputValueFromURL();
  2302. }
  2303. if (!!this.isInputFocus) {
  2304. super.setInputFocus();
  2305. }
  2306. }
  2307. }
  2308. SearchFormModel.ConcreteControl = ConcreteControl;
  2309. })(SearchFormModel || (SearchFormModel = {}));
  2310. class ResultPageAddSearchForm {
  2311. start() {
  2312. let control = new SearchFormModel.ConcreteControl();
  2313. control.setPageResult();
  2314. control.setInputValueFromURL();
  2315. control.start();
  2316. }
  2317. }
  2318. class IndexPageAddSearchForm {
  2319. start() {
  2320. let control = new SearchFormModel.ConcreteControl();
  2321. control.setPageIndex();
  2322. control.setInputFocus();
  2323. control.start();
  2324. }
  2325. }
  2326. class LayoutControl {
  2327. constructor() {
  2328. this.SearchResultManager = new SearchResult.Manager();
  2329. this.LayoutElements = new LayoutElements();
  2330. this.AutoNextPageSwitch = new AutoNextPageSwitch();
  2331. }
  2332. getListsHTML(ListTotal) {
  2333. let listsHTML = "";
  2334. for (let i = 0; i < ListTotal; i++) {
  2335. listsHTML = listsHTML + this.LayoutElements.getListHTML();
  2336. }
  2337. return listsHTML;
  2338. }
  2339. getContainer(ListTotal) {
  2340. let $container = $(this.LayoutElements.getContainerHTML());
  2341. let $dock = $(this.LayoutElements.getDockHTML());
  2342. let $lists = $(this.getListsHTML(ListTotal));
  2343. $dock.append($lists);
  2344. $container.append($dock);
  2345. return $container;
  2346. }
  2347. insertListHTMLToWeb(ListTotal) {
  2348. let $html = $("#content_left");
  2349. let $container = this.getContainer(ListTotal);
  2350. $html.after($container);
  2351. }
  2352. movePageResultToList() {
  2353. let oldSearchResultItems = this.SearchResultManager.getCurrentPageSerachResult();
  2354. let multipleLayout = new MultipleLayout();
  2355. multipleLayout.addSearchResultToList(oldSearchResultItems);
  2356. }
  2357. addPageNumberModel() {
  2358. let $pageNumberContainer = new PageNumber().getPageNumberContainer();
  2359. $(this.LayoutElements.getContainerClassName()).after($pageNumberContainer);
  2360. }
  2361. autoNextPageLoad() {
  2362. let nextPage = new NextPage();
  2363. nextPage.autoLoad();
  2364. }
  2365. switchAutoNextPage() {
  2366. return this.AutoNextPageSwitch.isEnable();
  2367. }
  2368. addAdditionModule() {
  2369. this.movePageResultToList();
  2370. if (this.switchAutoNextPage()) {
  2371. this.autoNextPageLoad();
  2372. }
  2373. else {
  2374. setTimeout(() => {
  2375. this.addPageNumberModel();
  2376. }, 500);
  2377. }
  2378. }
  2379. runGeneralLayout() {
  2380. this.insertListHTMLToWeb(1);
  2381. this.addAdditionModule();
  2382. }
  2383. runOneCenterLayout() {
  2384. this.insertListHTMLToWeb(1);
  2385. this.addAdditionModule();
  2386. }
  2387. runTwoCenterLayout() {
  2388. this.insertListHTMLToWeb(2);
  2389. this.addAdditionModule();
  2390. }
  2391. runThreeCenterLayout() {
  2392. this.insertListHTMLToWeb(3);
  2393. this.addAdditionModule();
  2394. }
  2395. start() {
  2396. let pageLayoutOption = new PageLayoutOption();
  2397. let currentLayout = pageLayoutOption.getCurrentPageType();
  2398. switch (currentLayout) {
  2399. case LAYOUT_TYPE.OneCenter:
  2400. this.runOneCenterLayout();
  2401. break;
  2402. case LAYOUT_TYPE.TwoCenter:
  2403. this.runTwoCenterLayout();
  2404. break;
  2405. case LAYOUT_TYPE.ThreeCenter:
  2406. this.runThreeCenterLayout();
  2407. break;
  2408. default:
  2409. this.runGeneralLayout();
  2410. break;
  2411. }
  2412. }
  2413. }
  2414. class LayoutElements {
  2415. constructor() {
  2416. this.CONTAINER_NAME = "bd_search_result_container";
  2417. this.DOCK_NAME = "bd_serach_result_dock";
  2418. this.LIST_NAME = "bd_list";
  2419. }
  2420. getContainerClassName() {
  2421. return "." + this.CONTAINER_NAME;
  2422. }
  2423. getDockClassName() {
  2424. return "." + this.DOCK_NAME;
  2425. }
  2426. getListClassName() {
  2427. return "." + this.LIST_NAME;
  2428. }
  2429. getContainerHTML() {
  2430. return `
  2431. <div class="${this.CONTAINER_NAME}">
  2432. </div>
  2433. `;
  2434. }
  2435. getDockHTML() {
  2436. return `<div class="${this.DOCK_NAME}" > </div>`;
  2437. }
  2438. getListHTML() {
  2439. return `<div class="${this.LIST_NAME}"></div>`;
  2440. }
  2441. }
  2442. class MultipleLayout {
  2443. constructor() {
  2444. this.LayoutElements = new LayoutElements();
  2445. this.listTotal = this.getListTotal();
  2446. }
  2447. getListTotal() {
  2448. return this.getListSelector().length;
  2449. }
  2450. getListSelector() {
  2451. return $(this.LayoutElements.getListClassName());
  2452. }
  2453. getListHeights() {
  2454. let $listSelectors = this.getListSelector();
  2455. let heights = new Array(this.listTotal).fill(0);
  2456. $listSelectors.each(function (index, element) {
  2457. heights[index] = $(this).outerHeight();
  2458. });
  2459. return heights;
  2460. }
  2461. useSinglePageLayout(searchResultItems) {
  2462. let $lists = this.getListSelector();
  2463. $lists.eq(0).append(searchResultItems);
  2464. }
  2465. useMultipageLayout(searchResultItems) {
  2466. let that = this;
  2467. let $lists = this.getListSelector();
  2468. $(searchResultItems).each(function () {
  2469. let listHeights = that.getListHeights();
  2470. let minHeight = Reflect.apply(Math.min, null, listHeights);
  2471. let order = listHeights.indexOf(minHeight);
  2472. $lists.eq(order).append(this);
  2473. });
  2474. }
  2475. addSearchResultToList(searchResultItems) {
  2476. if (this.listTotal <= 1) {
  2477. this.useSinglePageLayout(searchResultItems);
  2478. }
  2479. else {
  2480. this.useMultipageLayout(searchResultItems);
  2481. }
  2482. }
  2483. }
  2484. class NextPage {
  2485. constructor() {
  2486. this.Page = new Page();
  2487. this.MultipleLayout = new MultipleLayout();
  2488. this.Filter = new SearchResult.Filter();
  2489. this.nextPageOrder = 1;
  2490. this.EXTRA_HEIGHT = 300;
  2491. this.baiduNextPageHref = "";
  2492. this.responTextCaches = [];
  2493. this.baiduNextPageHref = this.getBaiduNextPageHref(this.getNextPageElement());
  2494. setTimeout(() => {
  2495. this.requireAndSave();
  2496. }, 1000);
  2497. }
  2498. getNextPageElement() {
  2499. return $("#page a").last();
  2500. }
  2501. getBaiduNextPageHref($element) {
  2502. let tempURL = $element.attr("href");
  2503. return String(tempURL);
  2504. }
  2505. updateBaiduNextPageHref($element) {
  2506. let pathURL = this.getBaiduNextPageHref($element);
  2507. this.baiduNextPageHref = pathURL;
  2508. }
  2509. hasBaiduNextPageHref() {
  2510. return !!this.baiduNextPageHref ? true : false;
  2511. }
  2512. getNextPageURL() {
  2513. return "https://www.baidu.com" + this.baiduNextPageHref;
  2514. }
  2515. isScrollToBottom() {
  2516. let wh = Number($(window).height());
  2517. let c = Number($(document).scrollTop());
  2518. let h = Number($(document.body).height());
  2519. return (Math.ceil(wh + c) + this.EXTRA_HEIGHT) >= h ? true : false;
  2520. }
  2521. hasResponTextCaches() {
  2522. return this.responTextCaches.length > 0 ? true : false;
  2523. }
  2524. extractSearchItems(responseText) {
  2525. return $(responseText).find("#content_left").children(" div[id]");
  2526. }
  2527. extractBaiduNextPageElement(responseText) {
  2528. return $(responseText).find("#page a").last();
  2529. }
  2530. requireNextPageContent(nextPageURL) {
  2531. let that = this;
  2532. return new Promise((resolve) => {
  2533. GM.xmlhttpRequest({
  2534. method: "GET",
  2535. url: nextPageURL,
  2536. timeout: 3000,
  2537. responseType: "text",
  2538. headers: {
  2539. "Host": "www.baidu.com",
  2540. "User-Agent": navigator.userAgent,
  2541. "Cookie": document.cookie,
  2542. "Accept- Encoding": "gzip, deflate, br",
  2543. "Is_xhr": 1,
  2544. },
  2545. onload: (response) => {
  2546. if (response.status === 200 ||
  2547. response.status === 304) {
  2548. resolve(response.responseText);
  2549. }
  2550. },
  2551. onerror: (response) => {
  2552. console.error(response);
  2553. console.error("不能获取下一页,请排查原因");
  2554. resolve("");
  2555. }
  2556. });
  2557. });
  2558. }
  2559. async requireAndSave(callback) {
  2560. if (!this.hasBaiduNextPageHref()) {
  2561. return;
  2562. }
  2563. let nextPageURL = this.getNextPageURL();
  2564. let responseText = await this.requireNextPageContent(nextPageURL);
  2565. let content = String(responseText);
  2566. if (content == "") {
  2567. return;
  2568. }
  2569. this.responTextCaches.push(content);
  2570. if (callback) {
  2571. Reflect.apply(callback, this, []);
  2572. }
  2573. }
  2574. async addNextPageToWeb() {
  2575. if (!this.hasBaiduNextPageHref()) {
  2576. return;
  2577. }
  2578. if (this.hasResponTextCaches()) {
  2579. let responseText = String(this.responTextCaches.shift());
  2580. let $nextPageElement = this.extractBaiduNextPageElement(responseText);
  2581. this.updateBaiduNextPageHref($nextPageElement);
  2582. let oldSearchResultitems = this.extractSearchItems(responseText);
  2583. let searchResultItems = this.Filter.run(oldSearchResultitems);
  2584. this.MultipleLayout.addSearchResultToList(searchResultItems);
  2585. }
  2586. else {
  2587. Reflect.apply(this.requireAndSave, this, [this.addNextPageToWeb]);
  2588. return;
  2589. }
  2590. this.requireAndSave();
  2591. setTimeout(() => {
  2592. this.bindScrollEvent();
  2593. }, 500);
  2594. }
  2595. bindScrollEvent() {
  2596. $(window).on("scroll", document, () => {
  2597. if (this.isScrollToBottom()) {
  2598. this.unbindScrollEvent();
  2599. this.addNextPageToWeb();
  2600. }
  2601. });
  2602. }
  2603. unbindScrollEvent() {
  2604. $(window).off("scroll");
  2605. }
  2606. autoLoad() {
  2607. setTimeout(() => {
  2608. this.bindScrollEvent();
  2609. }, 2000);
  2610. }
  2611. }
  2612. class Page {
  2613. constructor() {
  2614. this.PN_DEFAULT_VALUE = 10;
  2615. this.START_PN_MODIFIED_VALUE = 30;
  2616. this.RN_SYSTEM_VALUE = 10;
  2617. this.RN_VALUE = 30;
  2618. this.pageNumberSelectedLabel = this.getSelectedLabelFromBaiduPageNumber();
  2619. this.pageNumberStartLabel = this.getStartLabelFromBaiduPageNumber();
  2620. }
  2621. getStartLabelFromBaiduPageNumber() {
  2622. let $element = $("#page span").first();
  2623. let content = $element.find("span").text();
  2624. return content == "" ? 1 : Number(content);
  2625. }
  2626. getSelectedLabelFromBaiduPageNumber() {
  2627. let $element = $("#page strong").first();
  2628. let content = $element.find("span").text();
  2629. return content == "" ? 1 : Number(content);
  2630. }
  2631. getPageNumberStartLabel() {
  2632. return Number(this.pageNumberStartLabel);
  2633. }
  2634. getPageNumberSelectedLabel() {
  2635. return Number(this.pageNumberSelectedLabel);
  2636. }
  2637. }
  2638. class Page_old {
  2639. constructor() {
  2640. this.PN_DEFAULT_VALUE = 10;
  2641. this.START_PN_MODIFIED_VALUE = 30;
  2642. this.RN_SYSTEM_VALUE = 10;
  2643. this.RN_VALUE = 30;
  2644. this.pageNumberSelectedLabel = this.getSelectedLabelFromBaiduPageNumber();
  2645. this.pageNumberStartLabel = this.getStartLabelFromBaiduPageNumber();
  2646. }
  2647. getStartLabel(selectedLable) {
  2648. let tempLable = selectedLable;
  2649. let offset = tempLable % 10;
  2650. let level = Math.floor(tempLable / 10);
  2651. let startLable = level * 10 + offset;
  2652. return startLable <= 5 ? 1 : startLable - 5;
  2653. }
  2654. getStartLabelFromBaiduPageNumber() {
  2655. let $element = $("#page span").first();
  2656. let content = $element.find("span").text();
  2657. return content == "" ? 1 : Number(content);
  2658. }
  2659. getSelectedLabel() {
  2660. let currentURL = new UrlEditor(location.href);
  2661. if (!currentURL.hasParam("pn")) {
  2662. return 1;
  2663. }
  2664. let pn = Number(currentURL.getParamValue("pn"));
  2665. let rn = Number(currentURL.getParamValue("rn"));
  2666. let firstTotal = this.getFirstPageToal();
  2667. return (pn - firstTotal) / rn + 2;
  2668. }
  2669. getSelectedLabelFromBaiduPageNumber() {
  2670. let $element = $("#page strong").first();
  2671. let content = $element.find("span").text();
  2672. return content == "" ? 1 : Number(content);
  2673. }
  2674. isFirstPage() {
  2675. let currentSearchURL = new UrlEditor(location.href);
  2676. let hasPnParam = currentSearchURL.hasParam("pn");
  2677. if (!hasPnParam) {
  2678. return true;
  2679. }
  2680. else {
  2681. let pn = Number(currentSearchURL.getParamValue("pn"));
  2682. return pn == 0 ? true : false;
  2683. }
  2684. }
  2685. getPageNumberStartLabel() {
  2686. return Number(this.pageNumberStartLabel);
  2687. }
  2688. getPageNumberSelectedLabel() {
  2689. return Number(this.pageNumberSelectedLabel);
  2690. }
  2691. getFirstPageToal() {
  2692. let currentSearchURL = new UrlEditor(location.href);
  2693. let hasRandomParam = currentSearchURL.hasParam("rn");
  2694. if (!hasRandomParam) {
  2695. return this.PN_DEFAULT_VALUE;
  2696. }
  2697. else {
  2698. return Number(currentSearchURL.getParamValue("rn"));
  2699. }
  2700. }
  2701. getNewPageURL(pageOrder, baiduNextPageHref) {
  2702. let currentSearchURL = new UrlEditor(location.href);
  2703. let baiduSearch = new BaiduSearch();
  2704. let firstPageTotal = this.getFirstPageToal();
  2705. let rn = Number(currentSearchURL.getParamValue("rn")) || this.RN_SYSTEM_VALUE;
  2706. let searchContent = currentSearchURL.getParamValue("wd");
  2707. baiduSearch.addSearchKeyword(searchContent).addRN(rn).openRandonNumber();
  2708. if (currentSearchURL.hasParam("si")) {
  2709. baiduSearch.addParam("si", currentSearchURL.getParamValue("si"));
  2710. baiduSearch.addParam("ct", currentSearchURL.getParamValue("ct"));
  2711. }
  2712. if (currentSearchURL.hasParam("gpc")) {
  2713. baiduSearch.addParam("gpc", currentSearchURL.getParamValue("gpc"));
  2714. }
  2715. if (pageOrder > 1) {
  2716. let level = pageOrder - 2;
  2717. let finalPnValue = firstPageTotal * (pageOrder - 1);
  2718. baiduSearch.addPN(finalPnValue);
  2719. }
  2720. if (!!baiduNextPageHref) {
  2721. let fullURL = "https://www.baidu.com/" + baiduNextPageHref;
  2722. let baiduNextParams = ["rsv_t", "rsv_idx", "rsv_pq"];
  2723. let o = (new URL(fullURL)).searchParams;
  2724. for (const param of baiduNextParams) {
  2725. if (o.has(param)) {
  2726. baiduSearch.addParam(param, String(o.get(param)));
  2727. }
  2728. }
  2729. }
  2730. return baiduSearch.getFinalURL();
  2731. }
  2732. }
  2733. class PageNumber {
  2734. constructor() {
  2735. this.Page = new Page();
  2736. this.BAIDU_PAGE_NUMBER_CONTAINER_NAME = "bd_page_number";
  2737. this.baiduNextPageHref = "";
  2738. this.baiduNextPageHref = this.getBaiduNextPageHref();
  2739. }
  2740. createContainerElement() {
  2741. return `<div id = "${this.BAIDU_PAGE_NUMBER_CONTAINER_NAME}"><div>`;
  2742. }
  2743. createPrePageElement() {
  2744. let selectedLable = this.Page.getPageNumberSelectedLabel();
  2745. let isFirstPage = selectedLable < 2;
  2746. let template = "";
  2747. if (isFirstPage) {
  2748. template = `<div class="bd-none bd_page_item bd_page_pre_page"></div>`;
  2749. }
  2750. else {
  2751. template = `<a class="bd_page_item bd_page_pre_page"><span order="1"}><上一页</span></a>`;
  2752. }
  2753. return template;
  2754. }
  2755. createNextPageElement() {
  2756. let selectedLable = this.Page.getPageNumberSelectedLabel();
  2757. let isFirstPage = selectedLable < 2;
  2758. let order = 0;
  2759. if (isFirstPage) {
  2760. order = 11;
  2761. }
  2762. else {
  2763. order = 12;
  2764. }
  2765. let template = `<a class="bd_page_item bd_page_next_page"><span order="${order}">下一页></span></a>`;
  2766. return template;
  2767. }
  2768. createPageNumberElement() {
  2769. let selectedLable = this.Page.getPageNumberSelectedLabel();
  2770. let startLable = this.Page.getPageNumberStartLabel();
  2771. let endLable = startLable + 10;
  2772. let isFirstPage = selectedLable < 2;
  2773. let pageNumberOrder = 0;
  2774. let template = "";
  2775. if (isFirstPage) {
  2776. pageNumberOrder = 1;
  2777. }
  2778. else {
  2779. pageNumberOrder = 2;
  2780. }
  2781. for (let pageNumber = startLable; pageNumber < endLable; pageNumber++) {
  2782. if (pageNumber == selectedLable) {
  2783. let selectedClassName = "bd_page_number_selected";
  2784. template += `<a class="bd_page_item bd_page_number ${selectedClassName}"><span order="${pageNumberOrder}"}">${pageNumber}</span></a>`;
  2785. }
  2786. else {
  2787. template += `<a class="bd_page_item bd_page_number"><span order="${pageNumberOrder}"}">${pageNumber}</span></a>`;
  2788. }
  2789. pageNumberOrder++;
  2790. }
  2791. return template;
  2792. }
  2793. getBaiduNextPageHref() {
  2794. let tempURL = $("#page a").last().attr("href");
  2795. return String(tempURL);
  2796. }
  2797. addClickEvent($container) {
  2798. $container.on("click", "span", (event) => {
  2799. event = event || window.event;
  2800. let order = $(event.target).attr("order");
  2801. let $baiduPageNumberElement = $("#page>div>*").eq(Number(order) - 1);
  2802. let href = $baiduPageNumberElement.attr("href");
  2803. if (href != "") {
  2804. window.open(href, "_self");
  2805. }
  2806. });
  2807. }
  2808. getPageNumberContainer() {
  2809. let $container = $(this.createContainerElement());
  2810. $container.append(this.createPrePageElement());
  2811. $container.append(this.createPageNumberElement());
  2812. $container.append(this.createNextPageElement());
  2813. this.addClickEvent($container);
  2814. return $container;
  2815. }
  2816. }
  2817. class PageNumber_old {
  2818. constructor() {
  2819. this.Page = new Page();
  2820. this.BAIDU_PAGE_NUMBER_CONTAINER_NAME = "bd_page_number";
  2821. this.baiduNextPageHref = "";
  2822. this.getBaiduNextPageHref();
  2823. }
  2824. createContainerElement() {
  2825. return `<div id = "${this.BAIDU_PAGE_NUMBER_CONTAINER_NAME}"><div>`;
  2826. }
  2827. createPrePageElement() {
  2828. let selectedLable = this.Page.getPageNumberSelectedLabel();
  2829. let order = selectedLable - 1;
  2830. let template = `<div class="bd-none bd_page_item bd_page_pre_page"></div>`;
  2831. if (order >= 1) {
  2832. template = `<a class="bd_page_item bd_page_pre_page"><span order="${order}"}"><上一页</span></a>`;
  2833. }
  2834. return template;
  2835. }
  2836. createNextPageElement() {
  2837. let selectedLable = this.Page.getPageNumberSelectedLabel();
  2838. let order = selectedLable + 1;
  2839. let template = `<a class="bd_page_item bd_page_next_page"><span order="${order}"}">下一页></span></a>`;
  2840. return template;
  2841. }
  2842. createPageNumberElement() {
  2843. let selectedLable = this.Page.getPageNumberSelectedLabel();
  2844. let startLable = this.Page.getPageNumberStartLabel();
  2845. let endLable = startLable + 10;
  2846. let content = "";
  2847. for (let order = startLable; order < endLable; order++) {
  2848. let additionClassName = "";
  2849. if (order == selectedLable) {
  2850. additionClassName = "bd_page_number_selected";
  2851. }
  2852. let template = `<a class="bd_page_item bd_page_number ${additionClassName}"><span order="${order}"}">${order}</span></a>`;
  2853. content += template;
  2854. }
  2855. return content;
  2856. }
  2857. getBaiduNextPageHref() {
  2858. if (this.baiduNextPageHref == "") {
  2859. let tempURL = $("#page a").first().attr("href");
  2860. this.baiduNextPageHref = String(tempURL);
  2861. }
  2862. }
  2863. addClickEvent($container) {
  2864. let selector = "#" + this.BAIDU_PAGE_NUMBER_CONTAINER_NAME;
  2865. $container.on("click", "span", (event) => {
  2866. event = event || window.event;
  2867. let order = $(event.target).attr("order");
  2868. let $element = $("#page>div>*").eq(Number(order) - 1);
  2869. let href = $element.attr("href");
  2870. if (href != "") {
  2871. window.open($element.attr("href"), "_self");
  2872. }
  2873. });
  2874. }
  2875. getPageNumberContainer() {
  2876. let $container = $(this.createContainerElement());
  2877. $container.append(this.createPrePageElement());
  2878. $container.append(this.createPageNumberElement());
  2879. $container.append(this.createNextPageElement());
  2880. this.addClickEvent($container);
  2881. return $container;
  2882. }
  2883. }
  2884. class FixSearchToolbar {
  2885. getNewURL(url) {
  2886. let search = new BaiduSearch();
  2887. let keyword = url.getParamValue("wd");
  2888. search.addSearchKeyword(keyword).addRN(30).openRandonNumber();
  2889. if (url.hasParam("si")) {
  2890. let siValue = url.getParamValue("si");
  2891. search.addParam("si", siValue);
  2892. }
  2893. return search.getFinalURL();
  2894. }
  2895. refresh() {
  2896. }
  2897. refresh_null() {
  2898. let url = new UrlEditor(location.href);
  2899. console.log(url.getFinalUrl());
  2900. if (!url.hasParam("random")) {
  2901. let temp = String(cleanURL(url));
  2902. location.href = temp;
  2903. }
  2904. function cleanURL(url) {
  2905. let search = new BaiduSearch();
  2906. let keyword = url.getParamValue("wd");
  2907. search.addSearchKeyword(keyword).addRN(30).openRandonNumber();
  2908. if (url.hasParam("si")) {
  2909. search.addParam("si", url.getParamValue("si"));
  2910. search.addParam("ct", url.getParamValue("ct"));
  2911. }
  2912. if (url.hasParam("gpc")) {
  2913. search.addParam("gpc", url.getParamValue("gpc"));
  2914. }
  2915. return search.getFinalURL();
  2916. }
  2917. }
  2918. observer() {
  2919. window.onload = () => {
  2920. let MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
  2921. if (!!MutationObserver) {
  2922. let observer = new MutationObserver(this.refresh_null);
  2923. let wrapper = document.querySelector("#form");
  2924. let observerConfig = {
  2925. childList: true,
  2926. subtree: true,
  2927. };
  2928. observer.observe(wrapper, observerConfig);
  2929. }
  2930. else {
  2931. console.error("百度搜索-优化: 浏览器不兼容 MutationObserver 接口, 请升级浏览器版本");
  2932. }
  2933. };
  2934. }
  2935. start() {
  2936. this.observer();
  2937. }
  2938. }
  2939. class ScrollToTop {
  2940. isInputTarget(event) {
  2941. return $(event.target).prop("tagName") == "INPUT" ? true : false;
  2942. }
  2943. bindScrollToTopEvent() {
  2944. let $selector = $(".s_form ");
  2945. $selector.off("click").on("click", (event) => {
  2946. if (this.isInputTarget(event)) {
  2947. event.stopPropagation();
  2948. return;
  2949. }
  2950. let element = document.documentElement;
  2951. let body = document.body;
  2952. let node = element.scrollTop ? element : body;
  2953. let top = node.scrollTop;
  2954. let step = top / 20;
  2955. let timer = setInterval(() => {
  2956. if (node.scrollTop <= 0) {
  2957. node.scrollTop = 0;
  2958. clearInterval(timer);
  2959. }
  2960. node.scrollTop -= step;
  2961. }, 10);
  2962. return false;
  2963. });
  2964. }
  2965. start() {
  2966. this.bindScrollToTopEvent();
  2967. }
  2968. }
  2969. class ShortcutKey {
  2970. constructor() {
  2971. this.KEY_ENTER = 13;
  2972. this.KEY_ALT = 18;
  2973. this.KEY_SHIFT = 16;
  2974. this.KEY_CTRL = 17;
  2975. this.KEY_GOOGLE = "G";
  2976. }
  2977. googleSeach() {
  2978. let google = new UrlEditor("https://www.google.com/search?q=%s");
  2979. let url = new UrlEditor(location.href);
  2980. let searchWord = url.getParamValue("wd");
  2981. google.setParam("q", searchWord);
  2982. location.href = google.getFinalUrl();
  2983. }
  2984. notAdditonKeyup(event) {
  2985. if (!event.altKey &&
  2986. !event.shiftKey &&
  2987. !event.ctrlKey &&
  2988. !event.metaKey) {
  2989. return true;
  2990. }
  2991. else {
  2992. return false;
  2993. }
  2994. }
  2995. isInputKeyup(event) {
  2996. let inputClassName = "bd-barbox-input";
  2997. if ($(event.target).hasClass(inputClassName)) {
  2998. return true;
  2999. }
  3000. else {
  3001. return false;
  3002. }
  3003. }
  3004. bingShortcutKeyEvent() {
  3005. $(document).off("keyup").on("keyup", (event) => {
  3006. let keyCode = event.keyCode || event.which || event.charCode;
  3007. if (this.isInputKeyup(event)) {
  3008. return false;
  3009. }
  3010. if (keyCode ==
  3011. this.KEY_GOOGLE.toUpperCase().charCodeAt(0) && this.notAdditonKeyup(event)) {
  3012. this.googleSeach();
  3013. }
  3014. });
  3015. }
  3016. start() {
  3017. this.bingShortcutKeyEvent();
  3018. }
  3019. }
  3020. class Sidebar {
  3021. constructor() {
  3022. this.SideToolBar = new SideToolBarModel.SideToolBar();
  3023. this.SideToolBarSwitch = new SideToolBarSwitch();
  3024. }
  3025. insertSidebarHTML() {
  3026. let $container = $("#head");
  3027. let $sideToolbar = this.SideToolBar.getSideToolBar();
  3028. $container.after($sideToolbar);
  3029. }
  3030. start() {
  3031. if (this.SideToolBarSwitch.isEnable())
  3032. this.insertSidebarHTML();
  3033. }
  3034. }
  3035. class BaiduIndexFactory {
  3036. create() {
  3037. let page = new Baidu();
  3038. page.add(IndexPageInjectStyles);
  3039. page.addDelayAndReady(IndexPageAddSearchForm);
  3040. page.execute();
  3041. }
  3042. }
  3043. class BaiduResultFactory {
  3044. create() {
  3045. let page = new Baidu();
  3046. page.add(ResultPageInjectStyles);
  3047. page.addDelayAndReady(ResultPageAddSearchForm);
  3048. page.addDelayAndReady(CustomMenu);
  3049. page.addReady(LayoutControl);
  3050. page.addReady(ScrollToTop);
  3051. page.addReady(Sidebar);
  3052. page.addReady(ShortcutKey);
  3053. page.execute();
  3054. useObserver();
  3055. }
  3056. }
  3057. function mutationfunc() {
  3058. let avoidMulExecute = new AvoidMulExecute();
  3059. if (avoidMulExecute.hasSign()) {
  3060. return;
  3061. }
  3062. avoidMulExecute.setSign();
  3063. location.href = location.href;
  3064. }
  3065. function useObserver() {
  3066. window.onload = () => {
  3067. let avoidMulExecute = new AvoidMulExecute();
  3068. avoidMulExecute.setSign();
  3069. let MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
  3070. if (!!MutationObserver) {
  3071. let observer = new MutationObserver(mutationfunc);
  3072. let wrapper = document.querySelector("#wrapper");
  3073. let observerConfig = {
  3074. childList: true,
  3075. subtree: true
  3076. };
  3077. observer.observe(wrapper, observerConfig);
  3078. }
  3079. else {
  3080. console.error("百度搜索-优化: 浏览器不兼容 MutationObserver 接口, 请升级浏览器版本");
  3081. }
  3082. };
  3083. }
  3084. function cleanURL(url) {
  3085. let search = new BaiduSearch();
  3086. let keyword = url.getParamValue("wd");
  3087. search.addSearchKeyword(keyword).addRN(30).openRandonNumber();
  3088. if (url.hasParam("si")) {
  3089. search.addParam("si", url.getParamValue("si"));
  3090. search.addParam("ct", url.getParamValue("ct"));
  3091. }
  3092. if (url.hasParam("gpc")) {
  3093. search.addParam("gpc", url.getParamValue("gpc"));
  3094. }
  3095. return search.getFinalURL();
  3096. }
  3097. function tidySearchLink() {
  3098. let url = new UrlEditor(location.href);
  3099. if (!url.hasParam("rn")) {
  3100. url.setParam("rn", "30");
  3101. location.href = url.getFinalUrl();
  3102. }
  3103. }
  3104. const IndexPageRouters = ["https://www.baidu.com/", "https://www.baidu.com/#", "http://ipv6.baidu.com/", "https://ipv6.baidu.com/"];
  3105. const ResultPagesRouters = ["https://www.baidu.com/s", "https://www.baidu.com/baidu"];
  3106. let router = new Router();
  3107. router.addRoute(IndexPageRouters, new BaiduIndexFactory());
  3108. router.addRoute(ResultPagesRouters, new BaiduResultFactory());
  3109. })();
  3110.  
  3111.  
  3112.  
  3113.  
  3114.  
  3115.  
  3116.  
  3117.  
  3118.  
  3119.  
  3120.  

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址