Popup Search

Popup search box and translate button (etc) for selected texts

  1. // ==UserScript==
  2. // @name Popup Search
  3. // @name:zh Popup Search: 快捷搜索
  4. // @author lkytal
  5. // @namespace Lkytal
  6. // @version 4.3.1
  7. // @icon https://github.com/lkytal/GM/raw/master/icons/search.png
  8. // @homepage https://lkytal.github.io/
  9. // @homepageURL https://lkytal.github.io/GM
  10. // @description Popup search box and translate button (etc) for selected texts
  11. // @description:zh 为选中文字弹出搜索和翻译的快捷按钮
  12. // @license AGPL
  13. // @include *
  14. // @exclude */test/*.html*
  15. // @exclude http://acid3.acidtests.org/*
  16. // @exclude http://www.acfun.tv/*
  17. // @exclude http://www.sf-express.com/*
  18. // @exclude http://furk.net/*
  19. // @grant GM_xmlhttpRequest
  20. // @grant GM_addStyle
  21. // @grant GM_openInTab
  22. // @grant GM_setClipboard
  23. // @grant GM_download
  24. // @grant GM_getValue
  25. // @grant GM_setValue
  26. // @grant GM_registerMenuCommand
  27. // @grant GM_info
  28. // @run-at document-end
  29. // @require https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js
  30. // @connect google.com
  31. // @connect translate.google.cn
  32. // @charset UTF-8
  33. // @supportURL https://github.com/lkytal/GM/issues
  34. // ==/UserScript==
  35.  
  36. "use strict";
  37. ;
  38. var CopyText,
  39. GetOpt,
  40. InTextBox,
  41. OnEngine,
  42. OpenSet,
  43. PopupInit,
  44. PopupLoad,
  45. ReadOpt,
  46. SaveOpt,
  47. SettingWin,
  48. ShowBar,
  49. TimeOutHide,
  50. UpdateLog,
  51. UpdateNotified,
  52. addAdditionalCSS,
  53. addCSS,
  54. ajaxError,
  55. doRequest,
  56. eventFromTextbox,
  57. fixPos,
  58. getLastRange,
  59. get_selection_offsets,
  60. isChrome,
  61. log,
  62. needPrefix,
  63. onTranslate,
  64. parseTranslationGoogle,
  65. popData,
  66. hasProp = {}.hasOwnProperty;
  67.  
  68. window.$ = window.jQuery = jQuery.noConflict(true);
  69.  
  70. popData = {
  71. count: 0,
  72. mouseIn: 0,
  73. bTrans: 0,
  74. additionalCSSLoaded: 0,
  75. codeVersion: 8,
  76. text: "",
  77. mousedownEvent: null,
  78. icons: {
  79. baiduIcon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAASzSURBVFhH7ZZNbBtFFMf//ljbtZ2149hp4zgkKamSNNDykapQKEH5QCKiBYGgIkpVQasegiok1CIOHCpRDkjcQIhbJUo5waUSB8SHBAWJCCRQgJRQmjaNEyd2nMTfG9u7y5v1prbT9doBRb3wk9aembc78595b96M4b4xWcYdxKj+3zH+F7ApAQZD4QMz/RipzOr/lc0JgIzulhTGnozjmX0xWMzF+DUZZdQ7ZbjsMomTaxa3KQGt3gTOjQp4aZjHGyN2HNozo1qAod1hXDydxoXX0ni4I662VmdTAg50SWhpqlfKHMfhyIBbKd/TBowdNqDJ5yC7A8cHY2huUExVqVmAkd50SldhMhU/8dWbYOWAx+6+joDfp7YCu9q98Fmm1Zo+VQWw8VjAsXSVkX2QJEm1ALFEDjkRaPaayedFpyeSAkRzUZAeFQUYyLK3NYFTfT/i2MEbaK5PYnK+DkvRmGIXRRFf/xQlQcBcJFcm7PfpDILLdWpNH9OOfWfPquUyfLyEt0YSGHq0E73dPJyGBXz3lxfB4E1wchzjv87jk/FWJAUOiTUbmvkw7QoRv0yGcPGyGwnBAD9PYmn5hBz5qcKu0DwL2LvDDwo497Kt0EDEE2m8eT6P8Ws8XA5AyNJSZwo25qLtFJu8ZRmrAo8mdx4nBpbQ01GPP69F8N4XfkzOkggNFZouYO7cuaP8ZYfdhgYXkM0DEZpYJivB48hhO5+jwJQRWgGmFjwkyoyB7jk88kAAbt6Bh+5vw+vPZWG3qh1tQDsGaE0WVoo+ZeTyIuJJaiNdvF3CC/sXceFMHh+dEXFyMAKfU1ASlc0CtPuLK8fobHXATu1aaApgPvn2NxNWVlOFBmLiShB/BC3KTI71RXF6pAl+3zY0emw4cagRb4/G4XGSXwjmko3c5meVigKWkhac+pDDZ9+EcP7zJbxzKYDltB2DXTN4caDutlTb2+PD0ceT4EzAjbnCTlnn5mKOXKZWNlDxQsIGYBaO/CvSv4ka+vdm8cpwCoEd7rJ9v04qLeD9T6O4Msfh1adF7GzxIEzb9t1LPvw8BUgaQVjTjYgt+1DXNJ0BTgSavGXZsBRRlDC/uIqPv1rDD1cbYONkpAQgnLAqk9EaSbunEljwHNk/i+NP8WgNNFYcnMFsLX4Pnj0goX93BOG4FQsxq5KsKk1TVwBb5cGeEI4+wVPHXrW1Op0dzTh52IPRg4vKWaGHrgCPExjpN8Lt5tWW2nE6tuH5Pjv2tFPi0EFXwF2NgL+R0t6/xO1yosP1t1rTRldAmrZOnhKQVsTXCmfIqSVtdAVMh2gPzxf2dOlpVyupdAYzmXvVmja6AnLkvg++9OP67BJdSIwUyTKWV9MILiYRiqSQWctDoGclLiht7AlHU8p7TPD3EwLGaf/rUTUPsHtBe0MSve0JuJwmuoDIiKyICIaziGXpSmaqg1WeQ08bh10tNrgsMayJNkzMmHF5qgHRBJ0QOiPUlIhYCJjoYf8yPYo36Ctp/UvVrlzVQctGqvMirRiZqvWu64J1WCd5GpRdv/LUPxNwa3AGlSkJKvasaKYj26jYq0+tRIDWCbZVlI51S0DZjLaY0rFqcsHWAfwDnVStvcSt8MwAAAAASUVORK5CYII=",
  80. bingIcon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACeklEQVRYhe2Wy2sTURTGu1fapOZRTKj2kaag1VaTNA9NjHkWLS3diC5q6wNc+A+EIkVw40ZRFBeuirgQF1JfuFBboYiIzb2TmdimCA0YWyupqalBTRo/F4M3KE0mhrR2kQsfDHPvOfOb794zZ6qErlb8T1VVACoAFYANDcD7dKAWFahFBd7TvL4AvE8HobsNqSmK1FuC6WP71gQiP4C3GeGe3fg9Zk54EHI35ub9evBenSi/fm0AhJ5dDCAy4Abn0ILa1CCGGlCrCsLhnRAO7QAxK0CMMlBb3R+QZQUId7ch0u9EYuwBVhs/s1l8fnIX00dtIEY5eF9LeQG+RWfYdeLZKGaHTiLS70TkuAvR4TP48vIpm19+MwFqURZ1ZooGAIAf8+/B2TWgZgVCzm0IuRtFHagH6awF72vBytek6EgmDWpVSTpRNEA2k0awYxN4T1PeZCFXA6hZwWKWxh+CWtXlAYhdHgK3f6ukpdSqxqfb11kcMckLVknhMuxtZ4lmA4MIOeslATiHFrFLARbH2TUFtyE/gF8PYpKzRIuP7oAYZZIAwY7NWJ6cEM/BSgbEIINQigNCVys4uwZz187nPkan/CCdW1Z9I96rAzHIMBsYZOuj505Lula4F/j1CO6tRnz0Fku6MHIF1KIEMclBrSpQqwrEKANn1yJ+b4Stm795EcRUW3oZ/r0V7872IZOI50ryYwzJV2NIvh5HenGB3f8eiyIy4AK1KCUfXhQAK7GD2xHcU42pI2bM3biApRePkQoHkQpPIvH8Pj5cHUa4tx3EUIOQq6GonP8EIEoP3tPEegK1KEXZ6sA5tCV1y439Q1IBqABUANZDvwDe9YuA3jr3dgAAAABJRU5ErkJggg==",
  81. translateIcon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAACXBIWXMAAAsTAAALEwEAmpwYAAAExklEQVRoge2Y+08UVxTH/dNmtYRHwNKHDW1tIWl/sK1QbFoSitXa9i642wWxKIK0ysOCLBSwBSWQslpboD54SGVNbAkB0cqjIIic+5jTH2b2gczM7o7DzpLsyfeHzeydmfM5994z555dEoEdrV22e5AEsNuDJIDdHiQB7PYgCRBpRJoLDtazggbzym9g+fX0je+oDQCfXGDL62iJCRlbhnhcAdLdsPzUGu+D9uVPLH4A+Q00Gp/WNnBhFRfXogLoGRUJB1DZyyUC+05GNbjvThLANEDPmChqYVuVU0UlAqnHoaiZBfVZQO5unigAtQNmckhuDU0UgJ9HxKEmFlShjjLcIBHI9EBhEytsZKWXEmYGojEuMKucSgTc3Szh9kA0dmdGVu69fk8kNMBXHSzDDVkeeLQsh193dzOJwMsVFLQnIGEARqfVSJdfDnm6sIppLpAInOrnejcmCgAiHmpiEoGXSuHvf9VJIF1MIpBSBg83T0uCAvjn5D2lIBH44BxlHPsnhIOARKCyVzf8iQWAgW+wRKDEy1KPg0TgtUq6Yli9xhWgIBLAM4q5NaEqf7cThu5rJx97AAobdVJJwGaX5APnQgBpLuif0AaQA5qal1sGeTRqHuTFFyPX3iYBGMeLwyLdHYq98iOlDB6vGFPHZq3DEeqXmAG4wF//EuErp7iVPViSm37naS4gXREmLVaTEd85Y3QWjQFgbQM7b25yfW857R0XwZQ5syiPTOsmUNNW2Gi0kGIAuOYXjsBScTiBdLEoT2GJAoCI3/v4nlIo8TL/nPWRjgeAkHFhFSnHF2lVzD/BsWl5bFqemJE3oigXzQN8rLWJKccSL3v3DJ1fNTkJ4Y2JlkGjz/aLAmz9EiveK//ur6bzT2JmWFzDlLLQK/JqI0+BeYC3TtNwB8O9N81w4Q81r795Ss1mE7MRnmAeQCLQfoPreW+CQZbx7dNUIpBdQe8+kJXiT+/sZg2Ag8DRdtY7Lr5oYxKBTI/GmP3V1Dcprk6Kq5NidskI5taUWghV93NE/PA8lQhkuOEpbBvAc+qbEAUNRo9r+9NoU37dySQCDidML8iI+MuIytM9alQCWglw/Z5YBzRgMABYWUel5D5Yr27ctQ31BPfReaNVZCXANb9AxHXAombth3qHdQHab6jbtycs3sohzuGEqXndtWclwG9+9d2M42GtPf3KCfrPY21X3q+jEoH0zSv+9pR6tq7q0yXfFgCFQYnfVoa5/55n8M+pju47Sb/t4UG5urlyLs2uoFQHwUqADDfdWx5Slke70M2pog83M1RcjtyWHLirvZWtBIheOVU02Jt4RlFBdRA4cYWf9fE6H6/z8doBXjvAP29V/fv0R+2tbA+AwvBoRUbEK+Nqujzwg0bhsLKOqS6QCOx2wta1ZydAbg1VDgz5gbTbdUt7mX/TqQ6o82kMsAcgt4YuriIizizKWeWQ6YHsCtDruAzdF5keyPRAXi0VW+bABoC8QOwtsXgDBGO/IwHyauiCpd7HG8C4mNsBAMWtFveFgOGrlWb7QibkINBxM0J7NCbvnZcidBe3JQu9d5Ye62DhOtqurcNtrMTLSrzsyObrxzrYkXb2umHstxEgnkoC2K0kgN1KAtitJIDd+h//4oa1H68RnAAAAABJRU5ErkJggg==",
  82. googleIcon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFcUlEQVRoge2ZW1AbVRjHQ7HWS7VirU6d6fiiM17qi1Wr40zfbMdxnJiWChQKVOqUTi/TAQFxFHDq9KbY0qvaDpZeoBtCCMRyb4GQAiEphCY03IJkAyQ2JZBsFshtjw+ZrsuJJHR3m4UxZ85T8v2/8//N7tlzznd4PIS/uDv3DsIAXDsIA3DtIAzAtYMwAPtJny6L2dScl6MpLjbIbll0d23GPvto4K61oTuVp7kHWN+QUWKQ4Z4ZMO9GAKJqTPV2zX6On8BLFUkIKvcSBACgHxvL1ZZ81nJw860j+b0Si9MOmR53Yjma4gz1xQz1xY1NuYyGZsX9Bw2Zpmmrz9wRnejx0i3Uf1eWJ1SOdkAMteaup0RfsDA68xTr6tJsLtxn68xA1X/GLC3dIhlphxgQVB7BOUBUefyQw+wzhLmnny+PnyvyOfE2A34PYtjefpxjgBP9UtKNZKQ9cHBcWz4EMOQwQ+9bSAFWSRKnPE7SzcEeJHB8pFAwiJkgho85nMR7b/9GtZLWVRhU8u2dyxDAobsizgDKjK1UK99rrgaVvFWzDwIQonLOAHpsKNXKeX1dUMkSoeD+7GVBOtrBGQD5/fE1pXVgPiqZpYeqKjHIFsoTcBOelZKEoKpraAtVlast4QxANHsOAABSlKeCqi4PN1ElH934hjOAXaqzEMBt62CE8PPAqhpTJyVeH4EEiX+EACvE2yZcDoghuvVYAMmy0mhyEnsI74ab2YzcMwTgIfzM7iIIYGzKuroyea74ZEWBL4wA4EDXBabumQM8JhTUmrr8X6QXJYn+we/Vp1tdDgCAFxDp6uCrXigAeAj/GXFstek2xDAydT9RcYLcML9cuePHHqFv34G5pwTyw+y4ZwWAh/AjhYI0daHViUEYuGdGazPoMZPvoAMAwNzT6xsyWHPPFoCvPyuO/bLj1DVUrrMZx53YhAtDcQuEtEt1lk337AJAPQLhb1cchwBWiOMWDQAP4RcONUAAa6QpiwngynAzBHBpuDHoSreAALL8VgkAwDW0ZXlZzOIAWF2Z7HBP+zNobegb1XsWAQAP4aeqzvkDAAAmXfgnsh8WHMAToq3v13+dojx9RFd21dDcYFZ3TgyRiwDU3IQnWVGwIACiyuNTVefqzGrqGR8A4CW8ky4cxS0obnETHn8GL+FlWllhbv2n3nLMPUV60jtMJ/v/jGv7eW3NvuVlsWTpal1dWq99xJ9hxut6py6NG4BNzXljDyqKAICO8f6NzXkBvpLLy2IuDTf6M7Tf76N/KqDtPklRQH0rDulEkULBfIT7O8+7CS/EQP9cRk+24Wa2y/uv+1MD1x9KHn3rKDQlghbF2ARYWrq5zz5Kjm2ZsdNYmA50XaACILSrQzQ0W1uPUcf+468bNJIsEQo0k8NkkqoxVegArhhm7XCyuovojf2d5gqZ5KqhOXQAXRNDVIDsO5fojU0tVtNOQgcAqmcV0y2t7eg4SSZZG8o7snqzmgpgc+EB7jUC9DMDVb4Mjfc0NN3TA/DfJP+ur33YJFHl28adGADATXjerU8PKcALku2TDy7FyJajLZ7/ahopFCCo3CfMpPsNoA/Ao9SnqE06pnytandQ7SpJonikzSc5qhMzveejrczqLiIAvE92Ex7JqCKh/ZdXpDuhB7KsNPrDhsz8vopJlwMAgHtmvlKeYWSdIQAP4X/actD/4pE6uXV2o2K8Xzk+MIiZnF6373cvIETG1levp7LgniEAD+E/Kdq6W/Wryjo4Fwa1GXHL8b6KN6v3smOdFQCyr5GmxLXlH9aJSgyyxr81nRP6zgl90z0tgsqP6sRJioLXq/cwraQ/UgDOOvcOwgBcOwgDcO0gDMC1g/85wD+li3AIT+EGpwAAAABJRU5ErkJggg==",
  83. linkIcon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAACKElEQVRYw+2WO2/TUBhAz+eELVLtZOUHMObRIT+AnaUMTDAgwVDcREJCEZUgAgkYUJxkaTcGJISUoSNj2ZuQoWPZWWJ76MCQ+mNIghznUYe4VKriyb6SfY6/171idW3lGq8013xtBG6WgCCfIDi8EB0amnoIuvvfBBReu0WnHlo6sXr2T0FeAeaVCiha9YotB8A8se+KaMYrtY+8YsuxejaCNBZGbd05EIbnepWGopVxOpxB0akCWD27skhiPQHhvVto1qLwUE38lcj2Ku15NbFOCnwV48Mi+Dg6Fav77LtXah8R6CEGiQqcevmGH4J/BvFn/lLxAVSNtBAkWoT5CTwSaiYSila97fbxiBS8RNfvAl+QM0XzQCYKH+WdjM4pToGd9dpQOFAxam6+4Vtde19E3kTh42p/tKgz/llAEGdQCLXUYnhjFXgsgXn9fBnc6ldN0eAd8PTS7y+bA/PgKnS8QvN+FD5+PAdOgTvLxm+sCKjQcQuzk0zgLAoXxFH0MZAByonshobqx1Ee7fLUGFWe535UhqqYguxOopTt7ZVXhS8VCC5Sv0c33MaYfkdV98MpsvpVU0ZhT/A8kAruAX33PHdkbrkd0ek+DteHaPAibs5XKcKhBPpgsN3qyHE9bW65XyYScXe6dQVmJKyMuyMG/qDY/JYEPO52/Aul7paaB+HFbHevhlAHbl21AMBQ4W1Kg6+BGmkMeRLnvJekwOZYvhG4uQJ/ANn7OVGZK3rWAAAAAElFTkSuQmCC",
  84. taobaoIcon: "data:image/png;base64,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",
  85. yahooIcon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAACXBIWXMAAAsTAAALEwEAmpwYAAAD6klEQVRoge2Y2U8TQRzH/ZOWbbG0VKOIUaGlBUUQwqEcUQwSwCPRRMUHTTTxFhTqgyQkHlF5sZEE1CePRxWNJ8YaZWdv6NLtsYcPqLTb6ZZut4wkO/k+zu8338/Od9uZXUNg+KrWGuQOLADUDiwA1A4sANQOLADUDiwA1A4sANQOLADUDkwGoDxVXG9f/gKl69AAzJ89p5ox6JrtqxuA8lWjAZg7OSDNzmok87yOVwmA9BKq0osGACrgcEafPcsEINwYzt6hxEVVeg0LOEvzAiAwHNjXRp8+zbAFEtveoV9O+6sNp1FmGLJsU74ABIaDYkfsxUv4GiRJlpXrl8uANGJfUbjunnwjtMTgcsen30EXir18ReB2nVoxGDTgf2F0VN9Szn9kZFm5FPoBXUwIBPRDCBzOfwpfvqIqiuZhRx6OM82toNT9bxpRZDMZgMBwqsovcxx8u3t6s3fA7QtjY5pS6edPtqPTgBmDRwlm9x4lFoMgzIdpn19vH0pc0akpTZX4KAjc6405MX4W4o8e02ZAVVVVTXz5ClxuaAm5sSz++nUKsCjOHT8BnTx3ciDycFwYHpk/fYbv62daWimvDzicpgEQGC4Mj0BfhujkZHp2Ka9P+h5KQf32jd5em6n5wq3R9M5s514zAYgiW3RSm4fFEb58NSVyzS0yy6ZATj3RP/ClAyiiCBwlpgJgOHCWJj5+ghDIMte1f3EO19evRKNJRhRhcCjrz0s6QOz58/RpJtwHqEov9LAk8zxV4Zk/e06V5eSnyB88tJy2QuCmdlfPXygIAIHh7N6uZJdLDExKbGSOY5paltlTGAloutH1uwoFQGB4+NogJEjJ7gGgq3O4JGgAZIaFps68KyVuz3RSWowT7a/JqaEGQHw8AZ1m5p2Y2rJNjcehAPzRY7l2E67fSO4wN3Cq4AAEhku/ZqEA9M76XFtpMklVeFYCIPHpMxygti4fACkUyjTNbID37wsBELl7b4UA4tPTUACmviEfAL7/IGqApuacAS5e+hsgiVy/YaUA3sHva1kvzeli2zoit++IExOR+w90ppn9Dnz+AgXg9nebu1ChAGSGgQLwhw7n1qrIxra1UxUe4HITtuLCA+B2asu28PkLUPeqqgojAbpmB+2rXvras7VCJ9kEbv9TqSjxN28LAGArjn/4mJiZkb6HZACUSCSTdZ2RmJnJDqCqYjBoPgBV5TfgWDP0Hm0SQHhwyHwActNm/vCRRXG9fVx3D7evi23vYFpamYZGuraO3rFTT7V1TEOj/hdsqtLLNDVz3QcoT1UBIvTfyAJALQsAtSwA1LIAUMsCQC0LALUsANRa9QC/AVjYN7+D2LKVAAAAAElFTkSuQmCC",
  86. wikiIcon: "data:image/png;base64,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",
  87. jdIcon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAQCSURBVGhD7ZhbSBRRGMfPzM5uu+7qesvdzFZLLTVrM7sQGBSUroF2oSIqgpSKHoUuUPZQkaESdJGKMhCkSJJ6UpCKArvZzUsGaaZppZWKreuue5mZ08YexrRxZncNZxbm97LftzPMnP85/3PmnA97DTQgkMHRb8AS8ALGLJQOLZ4gIHiDBXsCyUJCIwkQGkmA0EgChEYSIDSSAKEJeAF+7Ubh8Pfc6K+1niQhtPNVQqzckzDAwarmqHwSZSxgUbOxBUmKpSvVq9dGrlmmCZNj6IpXCL8bhT+/0fUP7ReKBreub4sMa8w9/Pl5HwXRVe8Ri4XomisDGYlNpsK+HrtPKqbFQjpTyPFMOXMLRdK2YfJHj7P1rbOu9Z/mGlS3apO2x8k4LcVYaFoErDi3sP6AivAk46Fto81138pKzBXv/lKCEyVPUwsWEZP7QzQnMjxIlbY54cZTY8dNzSqmMTR5JON9xRfaCzOJZA7gxNyNCx61Re+PQX8AyrVv06d2B68EsUxiN5h8VvSlx7otKpSDNvPeazYXSiZDRAL+QOhjrpYrmFJbQ1FXwwj3IIhMgHscIjbMPTIPJcDiOP/ERaOEFdEJAECu3pMvQzGANZXmUa4xEKEAgOtNqjgUA2fD4BeOHYkoBQBiljYZhQB8d3RxDYEoBWAzlAb0nXJDf+aax6IUAHBZiBqF7mkwwrWUilMAhM4x32NKZkqzIE4BFNk/hEK3gJlKjn2dKAVQZksXhWKgIuZrAkwAtH+0NKEYgNSQOQoUsuGXAEjTTAcBGYb5dBjkBVKtlc5RlICUzPBQrkb6NwIkybwAKGW+nWb5oH/1l1Yx6ya+c0fQxLPGOPwSQA07BlAIQIRS/R99CMnW0r57zPiuiswzcD/dn3dD59fRNhSD2CSV6r+NALS8+LjtIrN5ww+VRkdxraFu/BFAd951MX1kXBfEelb0HWhp6sjJtHagFMTmGQoXE3yd47sAaB0qu8N4lNixlPcdXkA5W66/X5ZhrmcebNTWFEcE8zfPVwGQbDrbU25GmSJblxU+lfZDymp7dbt9V1pLWoGd6XuQrKmvTUj2ypo8VQl73dX+YJMu3aCYgdHW3qHqs915FWMePdVoPJbIWv8YV5XQ52hPmxSMmWkS2syu3m7Hu9eOmuaJGzV9dsT9irgUNXfrvS2rjBQt/nCiEyUTWF6Y+PiodpLPPG9pkQ1cdvDyvOKdWi+WtSmXVYwHDbWHJ2u974QR+0/HtPctKdvtTev/hu9uFn8YFCerk5+VRIXzLHCcYFhsvCxrY9DxM7oHL1Ot3UuuFOjjeWzDil+VOREgmsrclJEECI0kQGgkAUIjCRAaSYDQSAKEZmw3GqBIFhIWAH4DD9ZjsqVbIzoAAAAASUVORK5CYII=",
  88. eBayIcon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAACXBIWXMAAAsTAAALEwEAmpwYAAAD+UlEQVRoge2XX2hbVRzH067isAzUBwfqgzL/zDHoZCqis2wgA4U9iVNB9qJSURHG1idhwhBBVkTUh01EER2CVEHRPVgVhk/Dm6Rt/jRpbZe/Tdo0Jk2afze99+NDb3pzb07S0jU9iPfwewi/3+/8zvdzzsk557pQXP9pk6/AAZCtwAGQrcABkK3AAZCtwAGQrcABkK3AAZCtwAGQrcABkK3AAdj5UZc+R6+YVk/h6W9J66XstaRFXiE+jO/+7gAEBoifNSw0KM7x9OPfT3CAmWdBo7lFh+zJMycsCZUQ7j78D+DZ3R2A6JA5WOoDezT4MIUx9DrtWiWA0mPpUvzTkjB7sstbqAOA/yG0lbbS19v0cbNL6AlLqORG6ZUHkPnMDCWG8e5h9nkBQP4Xs0vuR0to5pkOQ3cfoKSYofHbDGc900Kg4X8QxYX/gOUfUrzaeegd2EL7CQwYtr4TanHBIix+iuJi6Ysml07oyA0A+PYRHSJzieUxypPUIqhp6gvUYlQCFK+y9BXxMwQPE33dAjB5F6n3yI2y9CV/n8Ddx+xzZC5SGKP0FyUPek0AoBUJHLSE8j9vOHdtAsFDFH4HXTCMsGlF83fuB+qLlqia2GydWqy5KMFDWwIID6KV7aXVBPHThI8Reoq5lyn80VFHhJJH4C+PM3+e2NusZhsuve00Zb/dzO5tdfVSnW4ppuE/YElz91GeFA+sJo2bNfuN1Z/Cc4vRvTrX0F8hf0VQRFdbL93NAQQPi2Y0Juicudhm5i4bCbbjMn/F7KsmG0Kr9lN/rWUubfL8aHHNvSSej0rYbqs5MUD6Q6NU6IjFX/jN8HtvNW9lvYrSw/KvlkytzOTdWwW4fkosa/Mt3ThGpx6z+FcL+O7BvYv0SNPUVFF6iL4pRt0KwOxJgaZalIm9nSwxbCav3wNTj9rr6CpaAb1Oxd/wrOK+megblrTlsRsACBwUAGgruG+yZ0bfIvkuyXMkz5H/qWkFLjQAHheU0lUir7HwkemZuHNbAZQeKkHBwHMvWNIm7kCrCNKAhY+NnPAx07lyjdT7xE7j24fiwncv4aOGefq3F8BF+Ch6tWURSsyfZ/ppQoNEXhVDrrV/vmucBy+azvRIJx3bDLC2+s2PsA1b84lUi+DeheJi8RPT2frJ0l2Atb009QjJd8iNUvKizqMV0WvoNbQiaoKVa2QvEz9LcMDyFgJyo6RHml41Or77dh6gDZXt08lQ0PQatb3mgezXG5T17Gb8dtO8e7oH0Mamj5P73rDQk1w/RXkCrYQaJ32h9UN2G61bdXfM5CtwAGQrcABkK3AAZCtwAGQrcABkK3AAZCtwAGQrcABkK3AAZCv4vwP8CyqoTA3RSbNfAAAAAElFTkSuQmCC",
  89. doubanIcon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAEOSURBVFhH7ZI/C4FRGMXNNqsMNoPB5BuZZVMymERZfA+DkiKRjyBS/iySKIOMyvBwuLfe9zpEb+9Fvad+y7nnee7pdkOhfES+CjVtQk2bUNMmprE6rMUvYbd5X1Ag+IRPC4y2E/Vw3oVd7I4b1LzyUwVm+6WUepWPwIyW5wLNaZtmXoEZraDA/xf4+if0qv8soOnM+2qNyPq4kXgl9RJktDDLdrqgpoNMI6vW3ZWopWkO4MwpzLKcC2o6iJWTat1duVaB5gDOnMIsy7mgpsF4N1UrRbqLAc0AnGlhhmUeoKZBdVhXa0VO55OEi9GHDDycaWHGzFBMw2+Z9wUF3voDvkJNm1DTJtS0CTWtEZELQLQd2odfLaoAAAAASUVORK5CYII=",
  90. amazonIcon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAACXBIWXMAAC4jAAAuIwF4pT92AAAEmUlEQVRo3u2aaUxcVRTHGWqRYmukaWuj0RibWhu3tNKiJNpiQmKMhrSpMWoNNU2qJLVp1FQpNcYvxhA/aOIShqUDlAKlzAAjLcuwlU3ApiWUYlmn7DsUBhiW4eeXQQK8OwwzwBuSd3M/TOadd+//996955x78twId1vX3U0BUAAUAAVAAVAAFICFPXYHWh/0h9EfQutD3M71ABC9mfwgmrWM97C4mfswppJ/guhHXA8gahOV3zExiD3N3E/Zl0Q85DIAibsZuMNyW0cBGm8XAEh6jrEuHGudhSvyHpxbOYN3caaVnJYVoOK8zbXex8AdzAO2bB40oFbJBBDhwXi3tKyuYtL8rMrU7mS9x2i7kCFpj0wAGQHSgtqyiPRYaKz1gRlp+5xjMgH8872UnBkSdknb95QLtsEZmQB0B2i5ztA9LOY5Nd1lQvt7GmmAihC544DanUtPkOpH7ofEPy00q/ldGqDywjpJ5mr+EACEuiRAzDbS/Mj7mPJzVP9K/SVGjIIldN5lAOJ2UhxMsxZT6zJimUsAXH2JhgQsk44EY5kBIjZSFcbMtOPZhJwAkQ/TkmFH/jyA6T6Tw64HUKsWih7toDKUlP1EbVrCC8kGoPcXqq+PI3qLvW5UNoC2HEEuZEDtLmF/909XAoh9XJicpb6+zFRCFoDsI9JqJoelH3+4G20GV4rEZV9JqxluFPgrDyaGpG+p+lkOgJs/SKsZ75W2z/3I1uleBoCKEKGgK3sXHZ29GG4UhwmLk4cyh27L+0Sopyll3jaI9KQ5ZYlI124Q7pzVAkh63pag1kyuv4POl6LPGKy1K6Fw4lTg6LtzoJhlow03rTlA/vHlSZyZojZS4HxHuPb2mgOoVRh19qqfHiP7KOFu1Mctypo60b46Gx+3U/4tnTcY62JmiplpRttpuEzsdkcBIjai9xfWk6O8MKYurX7oX7T75yrYfbfmLvVXc/kZ66WCT8UZa6ijAOUhAGOd3DglXcdUqygIEu7UBw2UniXSc+Fps6cSoOUaFx+dHWcDlgnhI7j9k6MA6W8yNWYdZbCGrEBBJVBF8gsUBFH+DRUhlJwmK5CEZ4VlwyhPUvah3jDvz6xAioLJCODKXuKfJGEXox32lFDtqP/8PxDQXUpGAOGq1SleqNAdQOtjPS1Nz1acdAed28TxT9F7c9477S4l811nos/CrnmMomD6b1vH1/vz11vW36ZW2xPZWUn3oi5GYneWniVmm+O6L27B8D5NyUyPzatPpr9BzW925tvLma/wJFOmRbnMJC0ZFJ2a8ydLitYfovIC7bkSG9fcR/ZRIj0Y7wUYMRK9eUXjQOJuuoqF7sLUijGdqjBKzpB3nJxjGD6g8CTl56j+hft6hurAIgp11MURu4NwN1L2AUyZ0PmuQiBTu1P0Oea+lUwl2g2k+s6bouAEV19ezUis8ebWj0yOOKXbMkFjIqmvyVfY0njz99cM1S4zL5qmo5CSL2znCGtYWlSruPoKlaG0ZgqX1ng37blUhZF9BM1W1/7UQLOV5BdJ80N/GN1BkvYs6UmUjz0UAAVAAVAAFAAFYL32/wDDp7bQ08tZUQAAAABJRU5ErkJggg==",
  91. youkuIcon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAADwklEQVR4nO2bW0hVQRSGv+QgImE+nEoKQqQkpCBCegifQkIiKoIgfIhIoQi6GBHVW0FPFlISEQjRayFhEl1FJHopIioiiq5EQVfRMK9ZDzO7vc64zzlbBZcd54fhzMxaM7PWf2avNewLzHDMiujLB4qm2pApQi8wlE5YADQD/cCfHC391seCKAKap4GBU1WaA6eDSyAf6EnHTA5iAJgDDOXZjiJmjvNgfC0CyMuimPPwBGgboA1PgLYB2vAEaBugDU+AtgHa8ARoG6ANT4C2AdrwBGgboA1PgLYB2ohDQC8wkkH+KYt8WiMbAfsw986WAF8i5MeBhcB84InoHwV+kOEW9HRDkui7p6VC56gj6wZmC/lZ4AOwg/C5QgJYA3SJcS+AQ8BdZ75hoB5YC7wGTgDrgZuOXoftbwQ+A7XAXjte6rUBG4BraXxLxiGgXuiUOIs0CVkCaAfmEY084JwdV2X7ypy1uoS+XHel0LmMuYMdpdfpzLfI9i+eDAFPHUdabf9vO3GATUC5aK/CELRN9CWAx4S7qthZq92ZL0C5lV8g9ZItBw6IdpszX7Htn5fGtyRkjwHLgGrRPm9/bwGvRP9S4KWtr8Bs7/3AReCw7R8BTmdZLwqjwBmgztbB7IpOUnfDhBAnCzSI+h3gDeLJCrDamafOMWynqN8ndCIu3mGCcTBuHeZyWTDOeSIRh4Aawu09ChwBbgh5A6lOuQ9YCkU9rvPSLjfFVjhzTgpxCMgD9oj2JUJHSjHX63Ihb3PGXxV1GSdcMgZEXe6gBZjMEOAksAX4hYkrUeNHCVOw1EmLdEEwKD8Jg4pEk5DLDLALuIdJjTJVtgKVot1hxw+SGvgaRX0xJvvsdtautPMHqAH6CANmgOo0PsXKArLIiAuGkB4hv07moFRr9WQgTGACbYnj2HPRlmmsmdR/9BSpZ5UiwvQHZvdO6hwgyzPHoYMROg8w21UaWYrZKb8JU+gxxr6EkcCQ9B3zHL/M9m931riOuSySdr33wGbGkl8BXMngz7gJcP+59xl0+4C3wNcMOoPAQ+A2Jqp3R8g/xrArKP2YnfMoy7oTImCY1K22dRyGTdcS6yAU4BImHwdoSKP33yEuATK1VWGOujmBuARsxASZQkzkzRkE7wglMYEjE3oxB4yo88D/iLnAt1inJIucfHfQ3xPUNkAbngBtA7ThCdA2QBueAG0DtOEJ0DZAG54AbQO04QnQNkAbngBtA7ThCbC/vaQ+W8t1DGB8/kfAENCiZs7Uo4WI95dm5Kez/uPpmY6/mlsYlHZ+rzYAAAAASUVORK5CYII=",
  92. youtubeIcon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAACXBIWXMAAAsTAAALEwEAmpwYAAADRUlEQVRoge3Z2U8TQRwHcP62pSAmZqkcQZCbUkAK5SxQ5SqSUvDAByOJCRojRuOjJsYjSkTBqPGIxngF3e0e0261BXqwu+yMD0tijHLs7DYDcX/5PTXpzPfTTWd2d3IYmtrXnUM8gQ0gncAGkE5gA0gnsAGkE9gA0glsAOkENsDod5wOtiifqy7m648IzVVihxv0tgKfB/S1g752MNAB/J1/tP753+3ziF3NQmsd76rg6su4qmK2KJ9xOrICiAz2JOcfKMw3LRGHqoKyVlBRNmKS/PVT8uE9saPJGkBi7lL2Em+HUVVpYsQsAPS1IQiJABBCMJPhXeWmAOvv3pBKr9fanVv4AKGlhuDPr5eWTLIlBZiA+OwM2fR6RYZ8mID00gLp8AghlLh+BROgChzGfOnni0jTLASknz3FAjgdUFUx5hO9jWJPq/J92SqAwjI4AK66BG8+0dvI0BRbfCBx7TJULNj1YCaNAxC9bjOAzXWsrWH9w3vTAhguO2QYEBnymQcwNMU4835ePK+lU2YIXH2ZYYAUGrUGQFMMTfGNRzOvX2IDxK4W44DJAC7A/e8xC3Nj0yFtbRVjTNDTahgQOzVuMUBfG2pLU4uPDQN6PcYBp7MC0C+FFApoibgBAM4VODuRLQBNRU50qxGwLwHhCnrt7m2jWzUW4EzQckB0fHBDimKMifcnPmkhgKstTS08wr45F9tdhgFScMgaQGHuj3MhbXUFbzS9cDYy4POYB/BNlWb2r82CMFxRaBjAuyvNANjDefHZGZjJmE2PEJTXt1kVtgSwJQV4t/Wi1y16G+XPH81H10vlwzgAhqZUIGDMl3oyj/cgsVWlXyxhAvbII+XKzTlMQHz2AunwCCEUDfgxAUJbA+nwCMryNk8zOwAYOlde/kIWkJy/v23Cnd7MRQN+gumhoggtNaYADE0lblwlE1/TYtOhHePt6vW6FBzOvH21EZOgLGc7NpRlVeDTSwtgoGM32QwecDgdbMlBrq6Mb64C3cdAvzdyvCs65peCw9JkQJoa27InRn53aFSaGpOCQ9FhH/B3gn4v8HmEtgbeVREup1mDZxz/4RHTHmsbQLptAOm2AaTbBpBuG0C6bQDp3veAX5Y5FwgEHimSAAAAAElFTkSuQmCC",
  93. tiebaIcon: "data:image/png;base64,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",
  94. inSiteIcon: 'data:image/png;base64,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',
  95. settingIcon: "data:image/png;base64,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",
  96. tipDown: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAXElEQVQYlYXMsQ5AQBREUSoVjQ+f+S0lSi2livJlr4ZEZDcmud3JVJIW2yPQVqXZPmwjaQXqEuJJ0vCLbrgDfRZFxBsH0GTRCybbcxF9HhPQZdEHbkUUEUg6JU0Xm2KvCU6v27kAAAAASUVORK5CYII=",
  97. tipUp: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAZElEQVQYlXXMIQ4CMBBE0UWhwHDw+ddCAhILEgWy4WNo0tAyyZidly1AwNba1CSvJOf6h/oduC/RAN7qfkJ9BC7VM6LhQ1O3E+pN8lAPNeYHHGsV4PkFN3WzREmuwEndLUFVfQC3Xa8Jl+92RAAAAABJRU5ErkJggg==",
  98. pending: "data:image/png;base64,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",
  99. copyIcon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAA3NCSVQICAjb4U/gAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAD/klEQVR4Xu2bS2gUWRSG/6puK+lokEBQGIniA4RZKW5UGJAwqxGEIOpKREXwgQ6ICgPqMCqzUHDhwgFlEFEQCaj4Ahe+UHChIrhSweBrRnwQR2M6bXV31dS5ObdTKe1K3e6K3Z1bH5zcqtOdTp3//vcRqtqwt3S58KAfBh0o4H+/+JAaU0kNJrdDBwrQH5RRD1Dxqtci6q6nIqpFVQQhQCW9X8+oiDDWalfGHEv29xOcoMvVmThAddloRKhGGUEXlPYBcfNlXifc+T/zWQw4RZhXz8B68oATlUMFy44fNQFym/6E2TED7kA/Z6rANGE0ZYQIOH4Q1uP7/EL1jKoARvtk9G/s4kzlmFNnouWPvwZPYhahoSbB4sO7nqMGgFVbYc+ex9nKkL3eWAK86sHAgR3DRJChitocYBjI/bQEaG3jxMgYcxfCaG5B/vYVzgzH/dgL++IpoFDgTHnkELAvn4bd/TfMabOQ2b4fRsabFyQVDgvt9wGRHFBo/wHOtoN8Fh+FB3eQO7x3RBcEHSBy7AKJcEMFLogmwKQOOFsPIH/9IvLeRVSLtXQ10vM7xXEUEb4lAEEiSEpDQlEEpSFAa7rz/k3V4ea8Scyj2PMI6bkL0LxxF5BOi1wYRmY8TG9plYH+vlJ8OeY51HGUVwglBwR7oFKaVv2KcYsWI/vbGljL1wkRwpxgTpmGln1H+SwCtFfYswFW7hMnypP8M8RtbSjkRa9T7w8bCjIY598XsM+dQP7GpRHDefHUqyqFrJuCnbP5E8pT2yGwfaWYE6hYKl4OBUmUFSKItWwtrF9WIPv7BiHGhIkTYDVb/OrX1McQ8Ir0O0FG1MkxjM8fP4c6QYs5IEyE+hHA5wIZcbmAIBF633jb74AQtRHAHZx2MnuPYPzhs0NxqBupH+eUgiARmlZuFsdxEHRDTQQo3LsN59kTuO9ew6WNkT/eejkO52WPECs1fTb/Zjz4RajJKqACOYOEye5ez5lwgqtAGLRCaDEJloOcoLUARCIAt9qSCMCttiQCcKstiQDcaksiALfakgjArbYkAnCrLYkA3GpLIgC32pIIwG19k0oPey4gLOgZAhW0d0BD3BdQ7VUiu3MdnH+e81l5GkIAFIso3LvFmZFx/+uFff5k6RZcGGPuzpAKpI+2c4Ao3tBUAFk8WX9wCHzrmwQ+5BCgZ3rcfPmnLUYDmgDpJifd7IwDf/FEpDkA6XEYWL4ZRls7J74j3hXnb15G/toFTsRLsg+I5AAPx3HQ96EPxUKRM40D2V5iyOfkPehQeweI7w1GwTRNtLa1etvyFGcag9Jyx+GHahe5sSiCtD1Zng5lSKQWYgiEihBQrSRCqj5F8BdejqF6gf8BYV09k0RLz2IAAAAASUVORK5CYII="
  100. },
  101. optionList: [{
  102. id: "Trans_st",
  103. text: "显示翻译按钮 / Display 'Translate' button",
  104. defaultValue: 1
  105. }, {
  106. id: "copy_icon_st",
  107. text: "显示复制按钮 / Display 'Copy' button",
  108. defaultValue: 1
  109. }, {
  110. id: "AutoCopy_st",
  111. text: "自动复制选中文字 / Auto copy selections",
  112. defaultValue: 0
  113. }, {
  114. id: "Fade_st",
  115. text: "超时自动隐藏 / Hide after timeout",
  116. defaultValue: 1
  117. }, {
  118. id: "Tab_st",
  119. text: "新标签页打开 / Open in new tabs",
  120. defaultValue: 1
  121. }, {
  122. id: "Focus_st",
  123. text: "前台标签页打开 / Force foreground tabs",
  124. defaultValue: 1
  125. }, {
  126. id: "Iframe_st",
  127. text: "在Iframe中显示/ Activate in iframes",
  128. defaultValue: 0
  129. }, {
  130. id: "Dis_st",
  131. text: "显示于文字上方 / Display above selection",
  132. defaultValue: 1
  133. }, {
  134. id: "Ctrl_st",
  135. text: "仅按下Ctrl时显示 / Only when ctrl pressed",
  136. defaultValue: 0
  137. }, {
  138. id: "userEngine_st",
  139. text: "自定义引擎 / Enable Customize",
  140. defaultValue: 0
  141. }],
  142. userEngines: [],
  143. defaultEngines: [{
  144. id: "UserEngine",
  145. title: "Example of User Engine",
  146. description: "自定义引擎示例 / Example of user engine",
  147. src: "http://lkytal.qiniudn.com/ic.ico",
  148. href: "https://www.google.com/search?newwindow=1&safe=off&q=${text}"
  149. }, {
  150. id: "UserEngine2",
  151. title: "Example Engine use dataURL",
  152. description: "DataURL引擎示例 / Example Engine use dataURL",
  153. src: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAA0SURBVDhPY/z//z8DKYAJShMNSNYAdRIjIyOEjwdAVNLNScgA7jysAUh7J41IDbROrQwMAOdoEhG0gLSFAAAAAElFTkSuQmCC",
  154. href: "https://www.google.com/search?q=${text}%20site:${domain}"
  155. }]
  156. };
  157.  
  158. popData.engines = [{
  159. id: "Open_st",
  160. title: "Open As Url",
  161. description: "选中文本视作链接打开 / Open selection as url",
  162. defaultState: 0,
  163. src: popData.icons.linkIcon,
  164. href: '${rawText}'
  165. }, {
  166. id: "Site_st",
  167. title: "Search Current Website",
  168. description: "在当前网站内搜索 / Search in current website",
  169. defaultState: 1,
  170. src: popData.icons.inSiteIcon,
  171. href: 'https://www.google.com/search?newwindow=1&safe=off&q=${text}%20site:${domain}'
  172. }, {
  173. id: "Bing_st",
  174. title: "Search with Bing",
  175. description: "必应搜索 / Search with Bing",
  176. defaultState: 1,
  177. src: popData.icons.bingIcon,
  178. href: 'https://bing.com/search?q=${text}&form=MOZSBR'
  179. }, {
  180. id: "Baidu_st",
  181. title: "百度搜索",
  182. description: "百度搜索 / Search with Baidu",
  183. defaultState: 1,
  184. src: popData.icons.baiduIcon,
  185. href: 'https://www.baidu.com/s?wd=${text}&ie=utf-8'
  186. }, {
  187. id: "Google_st",
  188. title: "谷歌搜索",
  189. description: "谷歌搜索 / Search with Google",
  190. defaultState: 1,
  191. src: popData.icons.googleIcon,
  192. href: 'https://www.google.com/search?newwindow=1&safe=off&q=${text}'
  193. }, {
  194. id: "Yahoo_st",
  195. title: "Search with Yahoo",
  196. description: "雅虎搜索 / Search with Yahoo",
  197. defaultState: 0,
  198. src: popData.icons.yahooIcon,
  199. href: 'https://search.yahoo.com/search;?p=${text}&ei=UTF-8'
  200. }, {
  201. id: "Taobao_st",
  202. title: "搜索淘宝",
  203. description: "搜索淘宝 / Search with Taobao",
  204. defaultState: 1,
  205. src: popData.icons.taobaoIcon,
  206. href: 'https://s.taobao.com/search?q=${text}'
  207. }, {
  208. id: "Tieba_st",
  209. title: "Search in Tieba",
  210. description: "搜索贴吧 / Search with Tieba",
  211. defaultState: 0,
  212. src: popData.icons.tiebaIcon,
  213. href: 'http://tieba.baidu.com/f/search/res?ie=utf-8&qw=${text}'
  214. }, {
  215. id: "youtube_st",
  216. title: "Search with Youtube",
  217. description: "搜索Youtube / Search with Youtube",
  218. defaultState: 1,
  219. src: popData.icons.youtubeIcon,
  220. href: 'https://www.youtube.com/results?search_query=${text}'
  221. }, {
  222. id: "youku_st",
  223. title: "Search with Youku",
  224. description: "搜索优酷 / Search with Youku",
  225. defaultState: 0,
  226. src: popData.icons.youkuIcon,
  227. href: 'http://www.soku.com/search_video/q_${text}'
  228. }, {
  229. id: "amazon_st",
  230. title: "Search with Amazon",
  231. description: "搜索亚马逊/ Search with Amazon",
  232. defaultState: 1,
  233. src: popData.icons.amazonIcon,
  234. href: 'https://www.amazon.com/s/field-keywords=${text}'
  235. }, {
  236. id: "eBay_st",
  237. title: "Search with eBay",
  238. description: "搜索eBay / Search with eBay",
  239. defaultState: 0,
  240. src: popData.icons.eBayIcon,
  241. href: 'http://www.ebay.com/sch/i.html?_nkw=${text}&_sacat=0'
  242. }, {
  243. id: "douban_st",
  244. title: "豆瓣电影",
  245. description: "搜索豆瓣电影 / Search with Douban Movie",
  246. defaultState: 0,
  247. src: popData.icons.doubanIcon,
  248. href: 'https://movie.douban.com/subject_search?search_text=${text}'
  249. }, {
  250. id: "jd_st",
  251. title: "Search with JD",
  252. description: "搜索京东 / Search with JD",
  253. defaultState: 0,
  254. src: popData.icons.jdIcon,
  255. href: 'https://search.jd.com/Search?keyword=${text}&enc=utf-8'
  256. }, {
  257. id: "Wiki_st",
  258. title: "Search with Wiki",
  259. description: "搜索维基百科 / Search with Wikipedia",
  260. defaultState: 0,
  261. src: popData.icons.wikiIcon,
  262. href: 'https://wikipedia.org/wiki/${text}'
  263. }];
  264.  
  265. log = function (msg) {
  266. popData.count += 1;
  267. return console.log("Popup Msg " + popData.count + " : " + msg);
  268. };
  269.  
  270. isChrome = function () {
  271. return navigator.userAgent.indexOf("Chrome") > -1;
  272. };
  273.  
  274. fixPos = function (sel, e) {
  275. var eventLeft, eventTop, fix, m_left, offsetLeft, offsetTop, offsets;
  276. offsets = get_selection_offsets(sel);
  277. offsetTop = offsets[0];
  278. offsetLeft = offsets[1];
  279. if (e != null) {
  280. eventTop = e.pageY;
  281. eventLeft = e.pageX;
  282. if (Math.abs(offsetTop - eventTop) > 50) {
  283. //log offsetTop + " : " + offsetLeft + " <==> " + eventTop + " : " + eventLeft
  284. offsetTop = eventTop - 8;
  285. }
  286. if (Math.abs(offsetLeft - eventLeft) > 50) {
  287. //translate
  288. offsetLeft = eventLeft + 10;
  289. }
  290. } else {
  291. $('#showUpBody').css('margin-left', '60px');
  292. }
  293. if (GetOpt('Dis_st')) {
  294. //UpSide
  295. offsetTop = offsetTop - 2 - $('#ShowUpBox').height();
  296. if (offsetTop - document.documentElement.scrollTop < 40) {
  297. offsetTop = document.documentElement.scrollTop + 40;
  298. }
  299. } else {
  300. offsetTop += 1.1 * offsets[2];
  301. }
  302. m_left = $('#ShowUpBox').width();
  303. fix = 0;
  304. if (offsetLeft - m_left < 4) {
  305. fix = 4 - offsetLeft + m_left;
  306. }
  307. $('#ShowUpBox').css("top", offsetTop + "px").css("left", offsetLeft - m_left + fix + "px");
  308. return $('#popupTip').css('margin-left', m_left - 20 - fix);
  309. };
  310.  
  311. TimeOutHide = function () {
  312. if (popData.mouseIn === 0 && GetOpt("Fade_st") && !popData.bTrans) {
  313. return $('#ShowUpBox').fadeOut(300);
  314. }
  315. };
  316.  
  317. OnEngine = function (e) {
  318. if (isChrome()) {
  319. //log "chrome"
  320. GM_openInTab($(this).data('link'), {
  321. active: GetOpt("Focus_st") === 1
  322. });
  323. } else {
  324. GM_openInTab($(this).data('link'), !GetOpt("Focus_st"));
  325. }
  326. $('#ShowUpBox').fadeOut(200);
  327. return false;
  328. };
  329.  
  330. PopupInit = function () {
  331. var $DivBox, $icon, EngineList, engine, j, k, l, len, len1, len2, ref, ref1, ref2;
  332. $('#ShowUpBox').remove();
  333. EngineList = "<a id='transBtn'> <img title='翻译' src='" + popData.icons.translateIcon + "' /> </a> <a id='copy_btn'> <img title='Copy' src='" + popData.icons.copyIcon + "' /> </a>";
  334. ref = popData.engines;
  335. for (j = 0, len = ref.length; j < len; j++) {
  336. engine = ref[j];
  337. EngineList += "<a id='" + engine.id + "Icon' class='engine'><img title='" + engine.title + "' src='" + engine.src + "' /></a>";
  338. }
  339. if (GetOpt("userEngine_st")) {
  340. ref1 = popData.userEngines;
  341. for (k = 0, len1 = ref1.length; k < len1; k++) {
  342. engine = ref1[k];
  343. EngineList += "<a id='" + engine.id + "Icon' class='userEngine'><img title='" + engine.title + "' src='" + engine.src + "' /></a>";
  344. }
  345. }
  346. $('body').append("<span id=\"ShowUpBox\"> <span id=\"showUpBody\"> <span id=\"popupWrapper\"> " + EngineList + " </span> <span id=\"transPanel\" /> </span> </span>");
  347. $DivBox = $('#ShowUpBox');
  348. $DivBox.hide();
  349. $DivBox.hover(function () {
  350. $(this).fadeTo(150, 1);
  351. return popData.mouseIn = 1;
  352. }, function () {
  353. if (popData.bTrans === 0 && $(this).is(":visible") && $(this).attr("opacity") === 1) {
  354. $(this).fadeTo(300, 0.7);
  355. clearTimeout(popData.timer);
  356. popData.timer = setTimeout(TimeOutHide, 6000);
  357. }
  358. return popData.mouseIn = 0;
  359. });
  360. $('#showUpBody').on("mouseup", function (event) {
  361. if (event.which === 3) {
  362. CopyText();
  363. $('#ShowUpBox').fadeOut(200);
  364. return false;
  365. } else if (event.which === 2) {
  366. GM_openInTab(document.defaultView.getSelection().toString());
  367. return false;
  368. }
  369. });
  370. $('#showUpBody').on("contextmenu", function (event) {
  371. return false;
  372. });
  373. $('#transPanel').on("mouseup contextmenu", function (event) {
  374. return event.stopPropagation();
  375. });
  376. $DivBox.on("click dblclick mousedown mouseup contextmenu", function (event) {
  377. return event.stopPropagation();
  378. });
  379. ref2 = popData.engines;
  380. for (l = 0, len2 = ref2.length; l < len2; l++) {
  381. engine = ref2[l];
  382. $icon = $("#" + engine.id + "Icon");
  383. if (!GetOpt(engine.id)) {
  384. $icon.hide();
  385. }
  386. }
  387. $DivBox.find('.engine, .userEngine').on('click', OnEngine);
  388. $('#transBtn').on("click", onTranslate);
  389. if (!GetOpt('Trans_st')) {
  390. $('#transBtn').hide();
  391. }
  392. $('#copy_btn').on("click", function () {
  393. CopyText(popData.rawText);
  394. return $('#ShowUpBox').fadeOut(200);
  395. });
  396. if (!GetOpt('copy_icon_st')) {
  397. $('#copy_btn').hide();
  398. }
  399. if (GetOpt('Tab_st')) {
  400. $DivBox.find('a').attr('target', '_blank');
  401. } else {
  402. $DivBox.find('a').attr('target', '_self');
  403. }
  404. if (GetOpt('Dis_st')) {
  405. popData.tip = popData.tipUp;
  406. return $DivBox.append('<span id="popupTip" class="tipUp"></span>');
  407. } else {
  408. popData.tip = popData.tipDown;
  409. return $DivBox.prepend('<span id="popupTip" class="tipDown"></span>');
  410. }
  411. };
  412.  
  413. ajaxError = function (res) {
  414. return $('#transPanel').empty().append("<p>Translate Error:<br /> " + res.statusText + " </p>").show();
  415. };
  416.  
  417. onTranslate = function (event) {
  418. event.preventDefault();
  419. popData.bTrans = 1;
  420. $("#transPanel").empty().append("<div style='padding:10px;'><img src='" + popData.icons.pending + "' /></div>").show();
  421. $('#popupWrapper').hide();
  422. fixPos(document.defaultView.getSelection());
  423. return doRequest(0, 2000);
  424. };
  425.  
  426. doRequest = function (i, wait) {
  427. var ErrHandle;
  428. ErrHandle = function () {
  429. return doRequest(i + 1, wait + 2000);
  430. };
  431. if (i >= 2) {
  432. ErrHandle = ajaxError;
  433. }
  434. return GM_xmlhttpRequest({
  435. method: 'POST',
  436. url: 'https://translate.google.cn/translate_a/single',
  437. data: "client=gtx&dj=1&q=" + popData.text + "&sl=auto&tl=auto&ie=UTF-8&oe=UTF-8&source=icon&dt=t&dt=bd",
  438. headers: {
  439. 'Content-Type': 'application/x-www-form-urlencoded'
  440. },
  441. timeout: wait,
  442. onload: parseTranslationGoogle,
  443. onerror: ErrHandle,
  444. ontimeout: ErrHandle
  445. });
  446. };
  447.  
  448. parseTranslationGoogle = function (responseDetails) {
  449. var PickMeaning, RLine, RTxt, Result, j, len, line, ref, sentence;
  450. if (!popData.bTrans) {
  451. return;
  452. }
  453. try {
  454. RTxt = JSON.parse(responseDetails.responseText);
  455. } catch (error) {
  456. return ajaxError(responseDetails);
  457. }
  458. RLine = function () {
  459. var j, len, ref, results;
  460. ref = RTxt.sentences;
  461. results = [];
  462. for (j = 0, len = ref.length; j < len; j++) {
  463. sentence = ref[j];
  464. results.push(sentence.trans);
  465. }
  466. return results;
  467. }().toString();
  468. PickMeaning = function (list) {
  469. var i, item, j, len, results;
  470. results = [];
  471. for (i = j = 0, len = list.length; j < len; i = ++j) {
  472. item = list[i];
  473. if (item.score > 0.005 || i < 3) {
  474. results.push(item.word);
  475. }
  476. }
  477. return results;
  478. };
  479. if (RTxt.dict != null) {
  480. ref = RTxt.dict;
  481. for (j = 0, len = ref.length; j < len; j++) {
  482. line = ref[j];
  483. RLine += "<br>" + (line.pos + " : " + PickMeaning(line.entry));
  484. }
  485. }
  486. Result = "<div id=\"tranRst\" style=\"font-size:13px;overflow:auto;padding:5px 12px;\"> <div style=\"line-height:200%;font-size:13px;\"> " + RLine + " </div> </div>";
  487. $('#transPanel').empty().append(Result).show();
  488. fixPos(document.defaultView.getSelection());
  489. };
  490.  
  491. $(document).on("mousedown", function (event) {
  492. popData.mousedownEvent = event;
  493. if (popData.bTrans === 1) {
  494. PopupInit();
  495. }
  496. return $('#ShowUpBox').fadeOut(200);
  497. });
  498.  
  499. $(document).on("mouseup", function (event) {
  500. if (event.which !== 1) {
  501. return;
  502. }
  503. if (GetOpt('Ctrl_st') && !event.ctrlKey) {
  504. return;
  505. }
  506. return ShowBar(event);
  507. });
  508.  
  509. eventFromTextbox = function (eventList) {
  510. var event, j, len;
  511. for (j = 0, len = eventList.length; j < len; j++) {
  512. event = eventList[j];
  513. if (event != null) {
  514. if ($(event.target).is('textarea, input, *[contenteditable="true"]')) {
  515. //console.log $(event.target)
  516. return true;
  517. }
  518. }
  519. }
  520. return false;
  521. };
  522.  
  523. InTextBox = function (selection) {
  524. var area, j, len, ref;
  525. if (isChrome()) {
  526. return false;
  527. }
  528. ref = $('textarea, input, *[contenteditable="true"]', document);
  529. for (j = 0, len = ref.length; j < len; j++) {
  530. area = ref[j];
  531. if (selection.containsNode(area, true)) {
  532. return true;
  533. }
  534. }
  535. return false;
  536. };
  537.  
  538. ShowBar = function (event) {
  539. var engine, j, k, len, len1, paraList, ref, ref1, sel, setHref;
  540. sel = document.defaultView.getSelection();
  541. if (InTextBox(sel) || eventFromTextbox([event, popData.mousedownEvent])) {
  542. return;
  543. }
  544. popData.rawText = sel.toString();
  545. popData.text = encodeURIComponent(popData.rawText.trim());
  546. if (popData.rawText === '') {
  547. return;
  548. }
  549. if (GetOpt("AutoCopy_st")) {
  550. CopyText(popData.rawText);
  551. }
  552. $('#transPanel').empty().hide();
  553. paraList = {
  554. "\\${rawText}": popData.rawText,
  555. "\\${text}": popData.text,
  556. "\\${domain}": document.domain,
  557. "\\${url}": location.href
  558. };
  559. setHref = function (engine) {
  560. var $engine, href, para, value;
  561. //log engine.id + " : " + engine.href
  562. href = engine.href;
  563. for (para in paraList) {
  564. if (!hasProp.call(paraList, para)) continue;
  565. value = paraList[para];
  566. href = href.replace(RegExp("" + para, "g"), value);
  567. }
  568. $engine = $("#" + engine.id + "Icon");
  569. return $engine.data('link', href);
  570. };
  571. ref = popData.engines;
  572. for (j = 0, len = ref.length; j < len; j++) {
  573. engine = ref[j];
  574. setHref(engine);
  575. }
  576. ref1 = popData.userEngines;
  577. for (k = 0, len1 = ref1.length; k < len1; k++) {
  578. engine = ref1[k];
  579. setHref(engine);
  580. }
  581. if (needPrefix(popData.rawText)) {
  582. $('#Open_stIcon').data('link', "http://" + popData.rawText.trim());
  583. }
  584. popData.mouseIn = 0;
  585. popData.bTrans = 0;
  586. clearTimeout(popData.timer);
  587. popData.timer = setTimeout(TimeOutHide, 6000);
  588. fixPos(sel, event);
  589. return $('#ShowUpBox').css('opacity', 0.9).fadeIn(200);
  590. };
  591.  
  592. needPrefix = function (url) {
  593. var j, len, prefix, urlPrefixes;
  594. urlPrefixes = ['http://', 'https://', 'ftp://', 'file://', 'thunder://', 'ed2k://'];
  595. for (j = 0, len = urlPrefixes.length; j < len; j++) {
  596. prefix = urlPrefixes[j];
  597. if (url.indexOf(prefix) === 0) {
  598. return 0;
  599. }
  600. }
  601. return 1;
  602. };
  603.  
  604. CopyText = function (selText) {
  605. if (selText == null) {
  606. selText = document.defaultView.getSelection().toString();
  607. }
  608. if ((typeof GM_info !== "undefined" && GM_info !== null ? GM_info.scriptHandler : void 0) === "Violentmonkey") {
  609. return document.execCommand('copy');
  610. }
  611. try {
  612. return GM_setClipboard(selText, "text");
  613. } catch (error) {
  614. return document.execCommand('copy');
  615. }
  616. };
  617.  
  618. GetOpt = function (id) {
  619. var ref;
  620. return GM_getValue(id, (ref = popData.optionList.find(function (item) {
  621. return item.id === id;
  622. })) != null ? ref.defaultValue : void 0);
  623. };
  624.  
  625. SaveOpt = function (id) {
  626. return GM_setValue(id, $("#" + id + " > input").prop("checked") + 0);
  627. };
  628.  
  629. ReadOpt = function (id) {
  630. return $("#" + id + " > input").prop("checked", GetOpt(id));
  631. };
  632.  
  633. OpenSet = function () {
  634. if ($('#popup_setting_bg').length === 0) {
  635. SettingWin();
  636. }
  637. return $('#popup_setting_bg').fadeIn(400);
  638. };
  639.  
  640. SettingWin = function () {
  641. var chsJSON, engJSON, engine, engineOptionList, generateEngineOption, generateOption, item, j, len, option, optionList, ref;
  642. addAdditionalCSS();
  643. $('#popup_setting_bg').remove();
  644. generateOption = function (option) {
  645. return "<span id='" + option.id + "' class='setting_item'> <img src=" + popData.icons.settingIcon + " /> <span class='text'>" + option.text + "</span> <input class='tgl tgl-flat' id='" + option.id + "_checkbox' type='checkbox'> <label class='tgl-btn' for='" + option.id + "_checkbox'></label> </span>";
  646. };
  647. optionList = function () {
  648. var j, len, ref, results;
  649. ref = popData.optionList;
  650. results = [];
  651. for (j = 0, len = ref.length; j < len; j++) {
  652. option = ref[j];
  653. results.push(generateOption(option));
  654. }
  655. return results;
  656. }().join(' ');
  657. generateEngineOption = function (engine) {
  658. return "<span id='" + engine.id + "' class='setting_item'> <img src=" + engine.src + " /> <span class='text'>" + engine.description + "</span> <input class='tgl tgl-flat' id='" + engine.id + "_checkbox' type='checkbox'> <label class='tgl-btn' for='" + engine.id + "_checkbox'></label> </span>";
  659. };
  660. engineOptionList = function () {
  661. var j, len, ref, results;
  662. ref = popData.engines;
  663. results = [];
  664. for (j = 0, len = ref.length; j < len; j++) {
  665. engine = ref[j];
  666. results.push(generateEngineOption(engine));
  667. }
  668. return results;
  669. }().join(' ');
  670. engJSON = '[\n {\n id: "UserEngine",\n title: "Example Engine",\n description: "Example of user-defined engine",\n src: "http://lkytal.qiniudn.com/ic.ico",\n href: "https://www.google.com/search?q=${text}"\n }\n]';
  671. chsJSON = '[\n {\n id: "UserEngine",\n title: "Example Engine",\n description: "自定义引擎示例",\n src: "http://lkytal.qiniudn.com/ic.ico",\n href: "https://www.google.com/search?q=${text}"\n }\n]';
  672. $("body").append("<div id='popup_setting_bg'> <div id='popup_setting_win'> <div id='popup_title'>PopUp Search Setting</div> <div id='popup_content'> <div id='tabs_box'> <div id='popup_tab1' class='popup_tab popup_selected'>\u9009\u9879 / General</div> <div id='popup_tab2' class='popup_tab'>\u641C\u7D22\u5F15\u64CE / Engines</div> <div id='popup_tab3' class='popup_tab'>\u81EA\u5B9A\u4E49 / Customize</div> <div id='popup_tab4' class='popup_tab'>\u5173\u4E8E / About</div> </div> <div id='page_box'> <div id='option_box'> <div id='popup_tab1Page'> " + optionList + " </div> <div id='popup_tab2Page'> " + engineOptionList + " </div> <div id='popup_tab3Page'> <div id='editTitle'> <div><b>\u8BF7\u9605\u8BFB\u5E2E\u52A9 / Read HELP first</b></div> <span id='popHelp'><u>Help</u></span> <span id='popReset'><u>Reset</u></span> </div> <textarea id='popup_engines'></textarea> </div> <div id='popup_tab4Page'> <h3>Authored by Lkytal</h3> <p> You can redistribute it under <a href='http://creativecommons.org/licenses/by-nc-sa/4.0/'> Creative Commons Attribution-NonCommercial-ShareAlike Licence </a> </p> <p class='contact-line'> Source Code at<br> Git OSChina <a class='tab-text' href='https://git.oschina.net/coldfire/GM'> https://git.oschina.net/coldfire/GM </a> <br /> Github <a class='tab-text' href='https://github.com/lkytal/GM'> https://github.com/lkytal/GM </a> </p> <p> Contact:<br> Github <a class='tab-text' href='https://github.com/lkytal'> https://github.com/lkytal/ </a> <br> Greasy fork <a class='tab-text' href='https://greasyfork.org/en/users/152-lkytal'> https://greasyfork.org/en/users/152-lkytal </a> </p> </div> </div> <div id='btnArea'> <div id='popup_save' class='setting_btn'>Save</div> <div id='popup_close' class='setting_btn'>Close</div> </div> </div> </div> </div> <div id='popup_help_bg'> <div id='popup_help_win'> <div id='popup_help_content'> <div id='helpLang'> <span id='engHead' class='popup_head_selected'>English</span> <span id='chsHead'>\u4E2D\u6587</span> </div> <div id='help_box'> <div id='engContent'> The content of custom engine should be in standard JSON format, in forms of following: <pre> " + engJSON + " </pre> The 'id' should be unique for every entry and must NOT contain any space character, the 'title' and the 'description' can be any text you like, the 'src' indicates the icon of every item, should be the URL to an image or be a <a href='http://dataurl.net/#about'>DataURL</a>. The 'href' is the link to be open upon click, you may have noticed the '${text}' variable, which will be replaced by selected text. Available variables are listed below: <ul> <li>${text} : will be replaced by the selected text (Url encoded, should use this by default)</li> <li>${rawText} : will be replaced by the original selected text</li> <li>${domain} : will be replaced by the domain of current URL</li> <li>${url} : will be replaced by the current web page's URL</li> </ul> Note: You can't modify built-in engines directly, however, you can disable them and add your own. </div> <div id='chsContent'> \u81EA\u5B9A\u4E49\u5F15\u64CE\u5185\u5BB9\u5E94\u5F53\u662F\u5408\u6CD5\u7684JSON\u683C\u5F0F, \u5982\u4E0B <pre> " + chsJSON + " </pre> \u6BCF\u4E00\u9879\u7684 id \u5FC5\u987B\u5404\u4E0D\u76F8\u540C\u4E14\u4E0D\u80FD\u542B\u6709\u7A7A\u683C, title \u548C description \u53EF\u4EE5\u968F\u610F\u586B\u5199, src \u662F\u8BE5\u9879\u7684\u56FE\u6807, \u53EF\u4EE5\u662F\u6307\u5411\u56FE\u6807\u7684 url \u6216\u8005\u662F\u4E00\u4E2A <a href='http://dataurl.net/#about'>DataURL</a>. href \u662F\u5F15\u64CE\u7684 url \u94FE\u63A5, \u5176\u4E2D\u53EF\u4EE5\u5305\u542B\u8BF8\u5982 ${text} \u8FD9\u6837\u7684\u53D8\u91CF, \u53D8\u91CF\u7684\u5927\u5C0F\u5199\u5FC5\u987B\u6B63\u786E, \u53EF\u7528\u7684\u53D8\u91CF\u6709: <ul> <li>${text} : \u4EE3\u8868\u9009\u4E2D\u6587\u5B57, \u7ECF\u8FC7 url encoding, \u4E00\u822C\u5E94\u5F53\u4F7F\u7528\u6B64\u9879</li> <li>${rawText} : \u4EE3\u8868\u672A\u7ECF encoding \u7684\u539F\u59CB\u9009\u4E2D\u6587\u5B57</li> <li>${domain} : \u4EE3\u8868\u5F53\u524D\u9875\u9762\u7684\u57DF\u540D</li> <li>${url} : \u4EE3\u8868\u5F53\u524D\u9875\u9762\u7684 url \u5730\u5740</li> </ul> \u6CE8\u610F: \u5185\u7F6E\u5F15\u64CE\u65E0\u6CD5\u76F4\u63A5\u4FEE\u6539, \u4F60\u53EF\u4EE5\u7981\u7528\u5B83\u4EEC\u7136\u540E\u6DFB\u52A0\u4F60\u81EA\u5B9A\u4E49\u7684\u5F15\u64CE </div> </div> <div id='help_btnArea'> <div id='popup_help_close' class='setting_btn'>Close</div> </div> </div> </div> </div> </div>");
  673. $("#popup_setting_bg, #popup_help_bg").hide();
  674. $("#tabs_box > .popup_tab").on("click", function (e) {
  675. $("#tabs_box > .popup_tab").removeClass("popup_selected");
  676. $(this).addClass("popup_selected");
  677. $("#option_box > div").hide();
  678. return $("#" + $(this).attr("id") + "Page").show();
  679. });
  680. $("#option_box > div").hide();
  681. $("#tabs_box > .popup_tab.popup_selected").click();
  682. $("#chsContent").hide();
  683. $("#engHead").on('click', function (event) {
  684. $("#engHead").addClass("popup_head_selected");
  685. $("#chsHead").removeClass("popup_head_selected");
  686. $("#engContent").show();
  687. return $("#chsContent").hide();
  688. });
  689. $("#chsHead").on('click', function (event) {
  690. $("#engHead").removeClass("popup_head_selected");
  691. $("#chsHead").addClass("popup_head_selected");
  692. $("#engContent").hide();
  693. return $("#chsContent").show();
  694. });
  695. ref = $("#popup_setting_win .setting_item");
  696. for (j = 0, len = ref.length; j < len; j++) {
  697. item = ref[j];
  698. if (item != null) {
  699. ReadOpt(item.id);
  700. }
  701. }
  702. $("#popup_engines").val(GM_getValue("engineString", popData.defaultEngineString));
  703. $("#popReset").click(function () {
  704. if (confirm("Reset?")) {
  705. return $("#popup_engines").val(popData.defaultEngineString);
  706. }
  707. });
  708. $("#popHelp").click(function () {
  709. return $("#popup_help_bg").fadeIn();
  710. });
  711. if (!GetOpt("userEngine_st")) {
  712. $("#popup_tab3").hide();
  713. }
  714. $("#popup_save").click(function () {
  715. var k, len1, ref1, userEngineString;
  716. ref1 = $("#popup_setting_win .setting_item");
  717. for (k = 0, len1 = ref1.length; k < len1; k++) {
  718. item = ref1[k];
  719. if (item != null) {
  720. SaveOpt(item.id);
  721. }
  722. }
  723. userEngineString = $("#popup_engines").val();
  724. if (userEngineString !== "") {
  725. try {
  726. popData.userEngines = JSON.parse(userEngineString);
  727. GM_setValue("engineString", userEngineString);
  728. } catch (error) {
  729. alert("搜索列表错误!请检查\nEngine config Error!");
  730. log(userEngineString);
  731. }
  732. }
  733. return $("#popup_setting_bg").fadeOut(300, function () {
  734. $("#popup_setting_bg").remove(); //force rebuild setting window
  735. return PopupInit(); //rebuild toolbar
  736. });
  737. });
  738. $("#popup_close, #popup_setting_bg").click(function () {
  739. return $("#popup_setting_bg").fadeOut(300, function () {
  740. return $("#popup_setting_bg").remove();
  741. });
  742. });
  743. $("#popup_help_bg, #popup_help_close").on("click", function (e) {
  744. return $("#popup_help_bg").fadeOut();
  745. });
  746. return $('#popup_setting_win, #popup_help_win, #popup_help_bg').click(function (e) {
  747. return e.stopPropagation();
  748. });
  749. };
  750.  
  751. UpdateLog = function () {
  752. addAdditionalCSS();
  753. $("body").append("<div id='popup_update_bg'> <div id='popup_update_win'> <div id='update_header'> Popup Search Updated (ver 4.3.0) </div> <div id='popup_update_content'> <div id='update_texts'> <p> <h3>此版本引入的重要改变:</h3> <p> 增加了复制按钮 </p> <p> 自定义引擎功能开放, 点击 'Open setting' 可以打开设置并启用该功能. 在自定义前请点击 'Help' 按钮以阅读帮助文档. </p> <p> 注意: 启用自定义引擎后, 重新打开设置窗口才会生效. </p> </p> <p> <h3>What's new in this version:</h3> <p> Provide 'Copy' button </p> <p> You can customize your own engines now. Click 'Open setting' to check it out. Remember to read 'HELP' before modify. </p> <p> Note: After you enabled customization, reopen setting window to take effect. </p> </p> </div> <div id='update_btnArea'> <div id='popup_update_open' class='setting_btn'>Open Setting</div> <div id='popup_update_close' class='setting_btn'>Close</div> </div> </div> </div> </div>");
  754. $('#popup_update_open').on('click', function (event) {
  755. UpdateNotified();
  756. $("#popup_update_bg").hide();
  757. OpenSet();
  758. });
  759. return $('#popup_update_close').on('click', function (event) {
  760. UpdateNotified();
  761. $("#popup_update_bg").hide();
  762. });
  763. };
  764.  
  765. UpdateNotified = function () {
  766. return GM_setValue("UpdateAlert", popData.codeVersion);
  767. };
  768.  
  769. PopupLoad = function () {
  770. var engine, j, k, len, len1, option, popupMenu, ref, ref1, setDefault, userEngineString;
  771. if (window.self !== window.top || window.frameElement) {
  772. if (!GM_getValue("Iframe_st", 0)) {
  773. return;
  774. }
  775. }
  776. addCSS();
  777. if (GM_getValue("UpdateAlert", 0) < popData.codeVersion) {
  778. setDefault = function (key, defaultValue) {
  779. return GM_setValue(key, GM_getValue(key, defaultValue));
  780. };
  781. ref = popData.optionList;
  782. for (j = 0, len = ref.length; j < len; j++) {
  783. option = ref[j];
  784. setDefault(option.id, option.defaultValue);
  785. }
  786. ref1 = popData.engines;
  787. for (k = 0, len1 = ref1.length; k < len1; k++) {
  788. engine = ref1[k];
  789. setDefault(engine.id, engine.defaultState);
  790. }
  791. UpdateLog();
  792. }
  793. popData.defaultEngineString = JSON.stringify(popData.defaultEngines, null, 4);
  794. if (GetOpt("userEngine_st")) {
  795. userEngineString = GM_getValue("engineString", popData.defaultEngineString);
  796. try {
  797. popData.userEngines = JSON.parse(userEngineString);
  798. } catch (error) {
  799. //alert "User Engine Syntax Error"
  800. console.error(userEngineString);
  801. }
  802. }
  803. PopupInit();
  804. GM_registerMenuCommand("Popup Search Setting / 设置", OpenSet, 'p');
  805. if (GM_getValue("PopupMenu", 0)) {
  806. popupMenu = document.body.appendChild(document.createElement("menu"));
  807. popupMenu.outerHTML = '<menu id="userscript-popup" type="context"><menuitem id="PopupSet" label="Popup Search设置"></menuitem></menu>';
  808. document.querySelector("#PopupSet").addEventListener("click", OpenSet, false);
  809. return $(document).on("contextmenu", function () {
  810. return document.body.setAttribute("contextmenu", "userscript-popup");
  811. });
  812. }
  813. };
  814.  
  815. setTimeout(PopupLoad, 100);
  816.  
  817. addCSS = function () {
  818. return GM_addStyle("#ShowUpBox { all: unset; width: auto; height: auto; position: absolute; z-index: 10240; color: black; display: inline-block; line-height: 0; vertical-align: baseline; box-sizing: content-box; } #showUpBody { min-width: 20px; max-width: 750px; min-height: 20px; max-height: 500px; display: block; border:solid 2px rgb(144,144,144); border-radius:1px; background:rgba(252, 252, 252, 1); } #popupWrapper { all: unset; margin: 3px 2px 3.8px 2px; display:block; line-height: 0; font-size:0; } #transPanel { line-height: normal; width: auto; font-size: 16px; overflow: auto; display: none; } #popupWrapper > a { all: unset; margin: 0px 2px; } #popupWrapper img { all: unset; margin: 0px; height: 24px; width: 24px; border-radius: 0px; padding: 0px; display: inline-block; transition-duration: 0.1s; -moz-transition-duration: 0.1s; -webkit-transition-duration: 0.1s; } #popupWrapper img:hover { margin: -1px -1px; height: 26px; width: 26px; } #popupTip { display: inline-block; clear: both; height: 9px; width: 9px; } .tipUp { background: url(" + popData.icons.tipUp + ") 0px 0px no-repeat transparent; margin-top: -2px; margin-bottom: 0px; } .tipDown { background: url(" + popData.icons.tipDown + ") 0px 0px no-repeat transparent; margin-top: 0px; margin-bottom: -2px; } #ShowUpBox a { text-decoration: none; display: inline-block; }");
  819. };
  820.  
  821. addAdditionalCSS = function () {
  822. if (popData.additionalCSSLoaded === 1) {
  823. return;
  824. }
  825. popData.additionalCSSLoaded = 1;
  826. return GM_addStyle("#popup_setting_bg { all: unset; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.2); position: fixed; left: 0px; top: 0px; z-index:102400; font-family: \"Hiragino Sans GB\", \"Microsoft Yahei\", Arial, sans-serif; display: -webkit-flex; display: flex; justify-content: center; align-items: center; } #popup_setting_win { all: unset; width: 760px; height: 90%; box-shadow: 0 0 10px #222; box-sizing: content-box !important; background: rgba(255, 255, 255, 0.98); overflow: hidden; display: -webkit-flex; display: -moz-flex; display: flex; flex-direction: column; } #popup_title { font-size:24px; font-weight: bold; text-align: center; padding: 15px; background: #16A085; color: white; flex-shrink: 0; height: 40px; } #popup_content { flex-grow: 1; flex-shrink: 1; height: calc(100% - 70px); padding: 0px; display: -webkit-flex; display: -moz-flex; display: flex; justify-content: space-between; align-items: stretch; } #tabs_box { display: -webkit-flex; display: -moz-flex; display: flex; flex-direction: column; flex-basis: 25%; flex-shrink: 0; background: #EEE; } .popup_tab { width: 100%; background: #EEE; padding: 15px; font-weight: bold; text-align: center; box-sizing: border-box; cursor: pointer; user-select: none; -moz-user-select: none; -webkit-user-select: none; } .popup_tab:hover { background: #ccc; } .popup_selected { border-right: none; background: #FFF; } .popup_selected:hover { background: #FFF; } #page_box { padding: 20px 30px; flex-grow: 1; flex-shrink: 1; max-height: 100%; display: -webkit-flex; display: -moz-flex; display: flex; flex-direction: column; } #option_box { display: -webkit-flex; display: -moz-flex; display: flex; flex-direction: column; align-items: stretch; flex-grow: 1; flex-shrink: 1; overflow-y: auto; } #option_box > div { scroll-behavior: smooth; flex-grow: 1; display: -webkit-flex; display: -moz-flex; display: flex; flex-direction: column; align-items: stretch; } #popup_engines { flex-grow: 1; border: solid 2px #ddd; text-overflow: clip; white-space: pre; overflow-x: auto; overflow-y: auto; word-wrap: break-word; resize: none; } #editTitle { padding: 0px 0px 15px 0px; display: -webkit-flex; display: -moz-flex; display: flex; justify-content: space-between; } #editTitle div { flex-grow: 1; } #editTitle span { margin-left: 20px; color : #1ABC9C; cursor: pointer; } #btnArea { display: -webkit-flex; display: -moz-flex; display: flex; justify-content: flex-end; margin-top: 20px; flex-shrink: 0; } .setting_btn { display: inline-block; font-size: 16px; text-align: center; mix-width: 50px; padding: 4px 10px 4px 10px; border-radius: 2px; margin: 0px 0px 0px 20px; background: #1ABC9C; color: #fff; cursor: pointer; user-select: none; -moz-user-select: none; -webkit-user-select: none; } .setting_btn:hover { text-shadow: 0px 0px 2px #FFF; } .setting_item { min-height: 28px; font-size: 14px; margin: 5px 0px 10px 0px; display: -webkit-flex; display: -moz-flex; display: flex; align-items: center; } .setting_item > img { width: 24px; height: auto; margin-right: 7px; } .setting_item .text{ flex-grow: 1; font-size: 16px; } #popup_help_bg { all: unset; width: 100%; height: 100%; position: fixed; top: 0; left: 0; background: transparent; display: -webkit-flex; display: flex; justify-content: center; align-items: center; z-index: 10240000; } #popup_help_win { all: unset; width: 650px; height: 80%; box-shadow: 0 0 10px #222; box-sizing: content-box !important; background: rgba(255, 255, 255, 0.98); padding: 20px; display: -webkit-flex; display: flex; flex-direction: column; align-items: stretch; /*overflow: hidden;*/ } #popup_help_content { max-height: 100%; flex-grow: 1; display: -webkit-flex; display: flex; flex-direction: column; align-items: stretch; } #helpLang { flex-grow: 0; flex-shrink: 0; display: -webkit-flex; display: flex; border-bottom: solid 1px #ccc; } #helpLang span { padding: 8px 30px; margin-bottom: -1px; cursor: pointer; user-select: none; -moz-user-select: none; -webkit-user-select: none; } #helpLang span.popup_head_selected { border-top: solid 1px #ccc; border-left: solid 1px #ccc; border-right: solid 1px #ccc; border-bottom: solid 3px #FFF; } #help_box { overflow-y: auto; flex-grow: 1; flex-shrink: 1; margin-top: 15px; } #help_box > div { word-wrap: break-word; } #help_btnArea { flex-grow: 0; flex-shrink: 0; display: -webkit-flex; display: flex; justify-content: flex-end; margin-top: 20px; } #popup_update_bg { all: unset; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.2); position: fixed; left: 0px; top: 0px; z-index: 1024000; font-family: \"Hiragino Sans GB\", \"Microsoft Yahei\", Arial, sans-serif; display: -webkit-flex; display: flex; justify-content: center; align-items: center; } #popup_update_win { all: unset; width: 50%; height: 80%; box-shadow:0 0 10px #222; box-sizing: content-box !important; background: rgba(255, 255, 255, 0.98); overflow: hidden; font-size: 16px; display: -webkit-flex; display: -moz-flex; display: flex; flex-direction: column; } #update_header { font-size: 24px; font-weight: bold; text-align: center; padding: 15px; background: #16A085; color: white; flex-shrink: 0; height: 40px; } #popup_update_content { flex-grow: 1; flex-shrink: 1; height: calc(100% - 70px); overflow: auto; padding: 15px; display: -webkit-flex; display: -moz-flex; display: flex; flex-direction: column; justify-content: space-between; align-items: stretch; } #update_texts{ flex-grow: 1; flex-shrink: 1; } #update_btnArea { flex-grow: 0; flex-shrink: 0; display: -webkit-flex; display: flex; justify-content: flex-end; margin-top: 20px; } .hidden { display: none; } .tgl { display: none; } .tgl, .tgl:after, .tgl:before, .tgl *, .tgl *:after, .tgl *:before, .tgl+.tgl-btn { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .tgl::-moz-selection, .tgl:after::-moz-selection, .tgl:before::-moz-selection, .tgl *::-moz-selection, .tgl *:after::-moz-selection, .tgl *:before::-moz-selection, .tgl+.tgl-btn::-moz-selection { background: none; } .tgl::selection, .tgl:after::selection, .tgl:before::selection, .tgl *::selection, .tgl *:after::selection, .tgl *:before::selection, .tgl+.tgl-btn::selection { background: none; } .tgl+.tgl-btn { outline: 0; display: inline-block; width: 4em; height: 2em; position: relative; cursor: pointer; } .tgl+.tgl-btn:after, .tgl+.tgl-btn:before { position: relative; display: inline-block; content: \"\"; width: 50%; height: 100%; } .tgl+.tgl-btn:after { left: 0; } .tgl+.tgl-btn:before { display: none; } .tgl:checked+.tgl-btn:after { left: 50%; } .tgl-flat+.tgl-btn { padding: 2px; -webkit-transition: all .2s ease; transition: all .2s ease; background: #fff; border: 4px solid #f2f2f2; border-radius: 2em; } .tgl-flat+.tgl-btn:after { -webkit-transition: all .2s ease; transition: all .2s ease; background: #f2f2f2; content: \"\"; border-radius: 1em; } .tgl-flat:checked+.tgl-btn { border: 4px solid #1ABC9C; } .tgl-flat:checked+.tgl-btn:after { left: 50%; background: #1ABC9C; }");
  827. };
  828.  
  829. getLastRange = function (selection) {
  830. var j, rangeNum, ref;
  831. for (rangeNum = j = ref = selection.rangeCount - 1; ref <= 0 ? j <= 0 : j >= 0; rangeNum = ref <= 0 ? ++j : --j) {
  832. if (!selection.getRangeAt(rangeNum).collapsed) {
  833. return selection.getRangeAt(rangeNum);
  834. }
  835. }
  836. return selection.getRangeAt(selection.rangeCount - 1);
  837. };
  838.  
  839. get_selection_offsets = function (selection) {
  840. var $test_span, Rect, lastRange, newRange;
  841. $test_span = $('<span style="display:inline;">x</span>');
  842. // "x" because it must have a height
  843. lastRange = getLastRange(selection);
  844. newRange = document.createRange();
  845. newRange.setStart(lastRange.endContainer, lastRange.endOffset);
  846. newRange.insertNode($test_span[0]);
  847. Rect = $test_span[0].getBoundingClientRect();
  848. $test_span.remove();
  849. return [Rect.top + window.scrollY, Rect.left + window.scrollX, 0, 0];
  850. };