Popup Search

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

当前为 2022-07-18 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Popup Search
  3. // @name:zh Popup Search: 快捷搜索
  4. // @author lkytal
  5. // @namespace Lkytal
  6. // @version 5.2.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. // @connect google.com
  20. // @connect google.cn
  21. // @grant GM_xmlhttpRequest
  22. // @grant GM_addStyle
  23. // @grant GM_openInTab
  24. // @grant GM_setClipboard
  25. // @grant GM_download
  26. // @grant GM_getValue
  27. // @grant GM_setValue
  28. // @grant GM_registerMenuCommand
  29. // @grant GM_info
  30. // @run-at document-end
  31. // @inject-into auto
  32. // @require https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.6.0.min.js
  33. // @connect google.com
  34. // @connect google.cn
  35. // @connect caiyunai.com
  36. // @connect deepl.com
  37. // @charset UTF-8
  38. // @supportURL https://github.com/lkytal/GM/issues
  39. // ==/UserScript==
  40.  
  41. "use strict";
  42. ;
  43. var CopyText,
  44. GetOpt,
  45. GetTextboxSelection,
  46. InTextBox,
  47. OnEngine,
  48. OpenSet,
  49. OpenUrl,
  50. PopupInit,
  51. PopupLoad,
  52. ReadOpt,
  53. SaveOpt,
  54. SettingWin,
  55. ShowBar,
  56. UpdateLog,
  57. UpdateNotified,
  58. addAdditionalCSS,
  59. addCSS,
  60. ajaxError,
  61. doHideBar,
  62. doRequest,
  63. eventFromTextbox,
  64. fixPos,
  65. getLastRange,
  66. get_selection_offsets,
  67. hideBar,
  68. isChrome,
  69. log,
  70. needPrefix,
  71. onCopy,
  72. onTranslate,
  73. parseTranslationCaiyun,
  74. parseTranslationDeepl,
  75. parseTranslationGoogle,
  76. popData,
  77. hasProp = {}.hasOwnProperty;
  78.  
  79. window.$ = window.jQuery = jQuery.noConflict(true);
  80.  
  81. popData = {
  82. count: 0,
  83. mouseIn: 0,
  84. bTrans: 0,
  85. additionalCSSLoaded: 0,
  86. codeVersion: 8,
  87. text: "",
  88. mousedownEvent: null,
  89. fadeEvent: [],
  90. icons: {
  91. handianIcon: "https://www.zdic.net/favicon.ico",
  92. 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=",
  93. bingIcon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACeklEQVRYhe2Wy2sTURTGu1fapOZRTKj2kaag1VaTNA9NjHkWLS3diC5q6wNc+A+EIkVw40ZRFBeuirgQF1JfuFBboYiIzb2TmdimCA0YWyupqalBTRo/F4M3KE0mhrR2kQsfDHPvOfOb794zZ6qErlb8T1VVACoAFYANDcD7dKAWFahFBd7TvL4AvE8HobsNqSmK1FuC6WP71gQiP4C3GeGe3fg9Zk54EHI35ub9evBenSi/fm0AhJ5dDCAy4Abn0ILa1CCGGlCrCsLhnRAO7QAxK0CMMlBb3R+QZQUId7ch0u9EYuwBVhs/s1l8fnIX00dtIEY5eF9LeQG+RWfYdeLZKGaHTiLS70TkuAvR4TP48vIpm19+MwFqURZ1ZooGAIAf8+/B2TWgZgVCzm0IuRtFHagH6awF72vBytek6EgmDWpVSTpRNEA2k0awYxN4T1PeZCFXA6hZwWKWxh+CWtXlAYhdHgK3f6ukpdSqxqfb11kcMckLVknhMuxtZ4lmA4MIOeslATiHFrFLARbH2TUFtyE/gF8PYpKzRIuP7oAYZZIAwY7NWJ6cEM/BSgbEIINQigNCVys4uwZz187nPkan/CCdW1Z9I96rAzHIMBsYZOuj505Lula4F/j1CO6tRnz0Fku6MHIF1KIEMclBrSpQqwrEKANn1yJ+b4Stm795EcRUW3oZ/r0V7872IZOI50ryYwzJV2NIvh5HenGB3f8eiyIy4AK1KCUfXhQAK7GD2xHcU42pI2bM3biApRePkQoHkQpPIvH8Pj5cHUa4tx3EUIOQq6GonP8EIEoP3tPEegK1KEXZ6sA5tCV1y439Q1IBqABUANZDvwDe9YuA3jr3dgAAAABJRU5ErkJggg==",
  94. 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==",
  95. 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==",
  96. 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",
  97. taobaoIcon: "data:image/png;base64,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",
  98. 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",
  99. wikiIcon: "data:image/png;base64,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",
  100. 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=",
  101. 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",
  102. doubanIcon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAEOSURBVFhH7ZI/C4FRGMXNNqsMNoPB5BuZZVMymERZfA+DkiKRjyBS/iySKIOMyvBwuLfe9zpEb+9Fvad+y7nnee7pdkOhfES+CjVtQk2bUNMmprE6rMUvYbd5X1Ag+IRPC4y2E/Vw3oVd7I4b1LzyUwVm+6WUepWPwIyW5wLNaZtmXoEZraDA/xf4+if0qv8soOnM+2qNyPq4kXgl9RJktDDLdrqgpoNMI6vW3ZWopWkO4MwpzLKcC2o6iJWTat1duVaB5gDOnMIsy7mgpsF4N1UrRbqLAc0AnGlhhmUeoKZBdVhXa0VO55OEi9GHDDycaWHGzFBMw2+Z9wUF3voDvkJNm1DTJtS0CTWtEZELQLQd2odfLaoAAAAASUVORK5CYII=",
  103. 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==",
  104. 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=",
  105. 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",
  106. tiebaIcon: "data:image/png;base64,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",
  107. inSiteIcon: 'data:image/png;base64,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',
  108. settingIcon: "data:image/png;base64,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",
  109. tipDown: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAXElEQVQYlYXMsQ5AQBREUSoVjQ+f+S0lSi2livJlr4ZEZDcmud3JVJIW2yPQVqXZPmwjaQXqEuJJ0vCLbrgDfRZFxBsH0GTRCybbcxF9HhPQZdEHbkUUEUg6JU0Xm2KvCU6v27kAAAAASUVORK5CYII=",
  110. tipUp: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAZElEQVQYlXXMIQ4CMBBE0UWhwHDw+ddCAhILEgWy4WNo0tAyyZidly1AwNba1CSvJOf6h/oduC/RAN7qfkJ9BC7VM6LhQ1O3E+pN8lAPNeYHHGsV4PkFN3WzREmuwEndLUFVfQC3Xa8Jl+92RAAAAABJRU5ErkJggg==",
  111. pending: "data:image/png;base64,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",
  112. 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="
  113. },
  114. optionList: [{
  115. id: "AutoCopy_st",
  116. text: "自动复制选中文字 / Auto copy selections",
  117. defaultValue: 0
  118. }, {
  119. id: "AutoCopy_tbox_st",
  120. text: "自动复制在文本框也生效 / Enable Autocopy in textboxes",
  121. defaultValue: 0
  122. }, {
  123. id: "Textbox_st",
  124. text: "不在文本框内显示 / Ignore selections in textboxes",
  125. defaultValue: 0
  126. }, {
  127. id: "Fade_st",
  128. text: "超时自动隐藏 / Hide after timeout",
  129. defaultValue: 1
  130. }, {
  131. id: "Click_st",
  132. text: "点击页面不隐藏 / Don't Hide on click",
  133. defaultValue: 0
  134. }, {
  135. id: "Tab_st",
  136. text: "新标签页打开 / Open in new tabs",
  137. defaultValue: 1
  138. }, {
  139. id: "Focus_st",
  140. text: "前台标签页打开 / Force foreground tabs",
  141. defaultValue: 1
  142. }, {
  143. id: "Iframe_st",
  144. text: "在Iframe中显示/ Activate in iframes",
  145. defaultValue: 1
  146. }, {
  147. id: "Dis_st",
  148. text: "显示于文字上方 / Display above selection",
  149. defaultValue: 1
  150. }, {
  151. id: "Ctrl_st",
  152. text: "仅按下Ctrl时显示 / Only when ctrl pressed",
  153. defaultValue: 0
  154. }, {
  155. id: "userEngine_st",
  156. text: "自定义引擎 / Enable Customize",
  157. defaultValue: 0
  158. }],
  159. userEngines: [],
  160. defaultEngines: [{
  161. id: "UserEngine",
  162. title: "Example of User Engine",
  163. description: "自定义引擎示例 / Example of user engine",
  164. src: "https://github.com/lkytal/GM/raw/master/icons/atom.png",
  165. href: "https://www.google.com/search?newwindow=1&safe=off&q=${text}"
  166. }, {
  167. id: "UserEngine_dataURL",
  168. title: "Example Engine use dataURL",
  169. description: "DataURL引擎示例 / Example Engine use dataURL",
  170. src: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAA0SURBVDhPY/z//z8DKYAJShMNSNYAdRIjIyOEjwdAVNLNScgA7jysAUh7J41IDbROrQwMAOdoEhG0gLSFAAAAAElFTkSuQmCC",
  171. href: "https://www.google.com/search?q=${text}%20site:${domain}"
  172. }, {
  173. id: "UserEngine_function",
  174. title: "Example of User Engine use function",
  175. description: "function自定义引擎示例 / Example of user engine use function",
  176. src: "https://github.com/lkytal/GM/raw/master/icons/atom.png",
  177. function: "alert('action on ' + domain); OpenUrl(text);"
  178. }]
  179. };
  180.  
  181. popData.engines = [{
  182. id: "Trans_st",
  183. title: "Translate",
  184. description: "Google翻译 / Translate selection (Google)",
  185. defaultState: 1,
  186. src: popData.icons.translateIcon,
  187. action: function () {
  188. return onTranslate('google');
  189. }
  190. }, {
  191. // {
  192. // id: "Trans_caiyun_st"
  193. // title: "Translate (Caiyun)"
  194. // description: "彩云小译翻译文本 / Translate selection (Caiyun)"
  195. // defaultState: 0
  196. // src: popData.icons.translateIcon
  197. // action: () -> onTranslate('caiyun')
  198. // },
  199. // {
  200. // id: "Trans_deepl_st"
  201. // title: "Translate (Deepl)"
  202. // description: "Deepl翻译文本 / Translate selection (Deepl)"
  203. // defaultState: 0
  204. // src: popData.icons.translateIcon
  205. // action: () -> onTranslate('deepl')
  206. // },
  207. id: "Copy_st",
  208. title: "Copy",
  209. description: "复制文本 / Copy selection",
  210. defaultState: 1,
  211. src: popData.icons.copyIcon,
  212. action: function () {
  213. return onCopy();
  214. }
  215. }, {
  216. id: "Setting_st",
  217. title: "Open Setting",
  218. description: "Popup search 选项 / Open Setting",
  219. defaultState: 1,
  220. src: popData.icons.settingIcon,
  221. action: function () {
  222. return OpenSet();
  223. }
  224. }, {
  225. id: "Open_st",
  226. title: "Open As Url",
  227. description: "选中文本视作链接打开 / Open selection as url",
  228. defaultState: 0,
  229. src: popData.icons.linkIcon,
  230. href: '${rawText}'
  231. }, {
  232. id: "Site_st",
  233. title: "Search Current Website",
  234. description: "在当前网站内搜索 / Search in current website",
  235. defaultState: 1,
  236. src: popData.icons.inSiteIcon,
  237. href: 'https://www.google.com/search?newwindow=1&safe=off&q=${text}%20site:${domain}'
  238. }, {
  239. id: "amazon_st",
  240. title: "Search with Amazon",
  241. description: "搜索亚马逊/ Search with Amazon",
  242. defaultState: 0,
  243. src: popData.icons.amazonIcon,
  244. href: 'https://www.amazon.com/s?k=${text}'
  245. }, {
  246. id: "Bing_st",
  247. title: "Search with Bing",
  248. description: "必应搜索 / Search with Bing",
  249. defaultState: 1,
  250. src: popData.icons.bingIcon,
  251. href: 'https://bing.com/search?q=${text}&form=MOZSBR'
  252. }, {
  253. id: "Baidu_st",
  254. title: "Search with Baidu",
  255. description: "百度搜索 / Search with Baidu",
  256. defaultState: 0,
  257. src: popData.icons.baiduIcon,
  258. href: 'https://www.baidu.com/s?wd=${text}&ie=utf-8'
  259. }, {
  260. "id": "Baidu_fy_st",
  261. "title": "Baidu Page Translation",
  262. "description": "百度页面翻译 / Baidu Page Translation",
  263. "src": "https://fanyi.baidu.com/favicon.ico",
  264. "href": "http://fanyi.baidu.com/transpage?query=${url}&source=url&ie=utf8&from=auto&to=zh&render=1"
  265. }, {
  266. id: "Yahoo_st",
  267. title: "Search with Yahoo",
  268. description: "雅虎搜索 / Search with Yahoo",
  269. defaultState: 0,
  270. src: popData.icons.yahooIcon,
  271. href: 'https://search.yahoo.com/search;?p=${text}&ei=UTF-8'
  272. }, {
  273. id: "Taobao_st",
  274. title: "Search with Taobao",
  275. description: "搜索淘宝 / Search with Taobao",
  276. defaultState: 0,
  277. src: popData.icons.taobaoIcon,
  278. href: 'https://s.taobao.com/search?q=${text}'
  279. }, {
  280. id: "Tieba_st",
  281. title: "Search in Tieba",
  282. description: "搜索贴吧 / Search with Tieba",
  283. defaultState: 0,
  284. src: popData.icons.tiebaIcon,
  285. href: 'http://tieba.baidu.com/f/search/res?ie=utf-8&qw=${text}'
  286. }, {
  287. id: "youtube_st",
  288. title: "Search with Youtube",
  289. description: "搜索Youtube / Search with Youtube",
  290. defaultState: 1,
  291. src: popData.icons.youtubeIcon,
  292. href: 'https://www.youtube.com/results?search_query=${text}'
  293. }, {
  294. id: "youku_st",
  295. title: "Search with Youku",
  296. description: "搜索优酷 / Search with Youku",
  297. defaultState: 0,
  298. src: popData.icons.youkuIcon,
  299. href: 'http://www.soku.com/search_video/q_${text}'
  300. }, {
  301. id: "eBay_st",
  302. title: "Search with eBay",
  303. description: "搜索eBay / Search with eBay",
  304. defaultState: 0,
  305. src: popData.icons.eBayIcon,
  306. href: 'http://www.ebay.com/sch/i.html?_nkw=${text}&_sacat=0'
  307. }, {
  308. id: "douban_st",
  309. title: "Search with Douban",
  310. description: "搜索豆瓣电影 / Search with Douban Movie",
  311. defaultState: 0,
  312. src: popData.icons.doubanIcon,
  313. href: 'https://movie.douban.com/subject_search?search_text=${text}'
  314. }, {
  315. id: "jd_st",
  316. title: "Search with JD",
  317. description: "搜索京东 / Search with JD",
  318. defaultState: 0,
  319. src: popData.icons.jdIcon,
  320. href: 'https://search.jd.com/Search?keyword=${text}&enc=utf-8'
  321. }, {
  322. id: "handian_st",
  323. title: "Search with Handian",
  324. description: "汉典搜索 / Search with Handian",
  325. defaultState: 0,
  326. src: popData.icons.handianIcon,
  327. href: 'https://www.zdic.net/hans/${text}'
  328. }, {
  329. id: "Google_st",
  330. title: "Search with Google",
  331. description: "谷歌搜索 / Search with Google",
  332. defaultState: 1,
  333. src: popData.icons.googleIcon,
  334. href: 'https://www.google.com/search?newwindow=1&safe=off&q=${text}'
  335. }, {
  336. id: "Wiki_st",
  337. title: "Search with Wiki",
  338. description: "搜索维基百科 / Search with Wikipedia",
  339. defaultState: 1,
  340. src: popData.icons.wikiIcon,
  341. href: 'https://wikipedia.org/w/index.php?search=${text}'
  342. }];
  343.  
  344. log = function (msg) {
  345. popData.count += 1;
  346. return console.log(`Popup Msg ${popData.count} : ${msg}`);
  347. };
  348.  
  349. isChrome = function () {
  350. return navigator.userAgent.indexOf("Chrome") > -1;
  351. };
  352.  
  353. fixPos = function (sel, e) {
  354. var eventLeft, eventTop, fix, m_left, offsetLeft, offsetTop, offsets;
  355. offsets = get_selection_offsets(sel, e);
  356. offsetTop = offsets[0];
  357. offsetLeft = offsets[1];
  358. if (e != null) {
  359. eventTop = e.pageY;
  360. eventLeft = e.pageX;
  361. if (Math.abs(offsetTop - eventTop) > 50) {
  362. //log offsetTop + " : " + offsetLeft + " <==> " + eventTop + " : " + eventLeft
  363. offsetTop = eventTop - 8;
  364. }
  365. if (Math.abs(offsetLeft - eventLeft) > 50) {
  366. //translate
  367. offsetLeft = eventLeft + 10;
  368. }
  369. } else {
  370. $('#showUpBody').css('margin-left', '60px');
  371. }
  372. if (GetOpt('Dis_st')) {
  373. //UpSide
  374. offsetTop = offsetTop - 2 - $('#ShowUpBox').height();
  375. if (offsetTop - document.documentElement.scrollTop < 40) {
  376. offsetTop = document.documentElement.scrollTop + 40;
  377. }
  378. } else {
  379. offsetTop += 1.1 * offsets[2];
  380. }
  381. m_left = $('#ShowUpBox').width();
  382. fix = 0;
  383. if (offsetLeft - m_left < 4) {
  384. fix = 4 - offsetLeft + m_left;
  385. }
  386. $('#ShowUpBox').css("top", offsetTop + "px").css("left", offsetLeft - m_left + fix + "px");
  387. return $('#popupTip').css('margin-left', m_left - 20 - fix);
  388. };
  389.  
  390. PopupInit = function () {
  391. var $DivBox, $icon, EngineList, engine, j, k, l, len, len1, len2, ref, ref1, ref2;
  392. $('#ShowUpBox').remove();
  393. EngineList = "";
  394. ref = popData.engines;
  395. for (j = 0, len = ref.length; j < len; j++) {
  396. engine = ref[j];
  397. EngineList += `<a id='${engine.id}Icon' class='engine'><img title='${engine.title}' src='${engine.src}' /></a>`;
  398. }
  399. if (GetOpt("userEngine_st")) {
  400. ref1 = popData.userEngines;
  401. for (k = 0, len1 = ref1.length; k < len1; k++) {
  402. engine = ref1[k];
  403. EngineList += `<a id='${engine.id}Icon' class='userEngine'><img title='${engine.title}' src='${engine.src}' /></a>`;
  404. }
  405. }
  406. $('html').append(`<span id=\"ShowUpBox\"> <span id=\"showUpBody\"> <span id=\"popupWrapper\"> ${EngineList} </span> <span id=\"transPanel\" /> </span> </span>`);
  407. $DivBox = $('#ShowUpBox');
  408. $DivBox.hide();
  409. $DivBox.on("click dblclick mousedown mouseup contextmenu", function (event) {
  410. return event.stopPropagation();
  411. });
  412. $('#transPanel').on("mouseup contextmenu", function (event) {
  413. return event.stopPropagation();
  414. });
  415. $DivBox.hover(function () {
  416. $(this).fadeTo(150, 1);
  417. return popData.mouseIn = 1;
  418. }, function () {
  419. if (popData.bTrans === 0 && $(this).is(":visible") && $(this).attr("opacity") === 1) {
  420. $(this).fadeTo(300, 0.7);
  421. clearTimeout(popData.timer);
  422. popData.timer = setTimeout(TimeOutHide, 6000);
  423. }
  424. return popData.mouseIn = 0;
  425. });
  426. $('#showUpBody').on("mouseup", function (event) {
  427. if (event.which === 3) {
  428. CopyText();
  429. hideBar(100);
  430. return false;
  431. } else if (event.which === 2) {
  432. GM_openInTab(document.defaultView.getSelection().toString());
  433. return false;
  434. }
  435. });
  436. $('#showUpBody').on("contextmenu", function (event) {
  437. return false;
  438. });
  439. ref2 = popData.engines;
  440. for (l = 0, len2 = ref2.length; l < len2; l++) {
  441. engine = ref2[l];
  442. $icon = $("#" + engine.id + "Icon");
  443. if (!GetOpt(engine.id)) {
  444. $icon.hide();
  445. }
  446. }
  447. $DivBox.find('.userEngine').on('click', OnEngine); // handle user engine!
  448. if (GetOpt('Tab_st')) {
  449. $DivBox.find('a').attr('target', '_blank');
  450. } else {
  451. $DivBox.find('a').attr('target', '_self');
  452. }
  453. if (GetOpt('Dis_st')) {
  454. popData.tip = popData.tipUp;
  455. return $DivBox.append('<span id="popupTip" class="tipUp"></span>');
  456. } else {
  457. popData.tip = popData.tipDown;
  458. return $DivBox.prepend('<span id="popupTip" class="tipDown"></span>');
  459. }
  460. };
  461.  
  462. ajaxError = function (res) {
  463. return $('#transPanel').empty().append(`<p>Translate Error:<br /> ${res.statusText} </p>`).show();
  464. };
  465.  
  466. onCopy = function () {
  467. CopyText();
  468. return hideBar();
  469. };
  470.  
  471. onTranslate = function (engine) {
  472. popData.bTrans = 1;
  473. $("#transPanel").empty().append(`<div style='padding:10px;'><img src='${popData.icons.pending}' /></div>`).show();
  474. $('#popupWrapper').hide();
  475. fixPos(document.defaultView.getSelection());
  476. return doRequest(engine, 0, 2000);
  477. };
  478.  
  479. doRequest = function (engine, i, wait) {
  480. var ErrHandle, lang;
  481. ErrHandle = function () {
  482. return doRequest(engine, i + 1, wait + 2000);
  483. };
  484. if (i >= 2) {
  485. ErrHandle = ajaxError;
  486. }
  487. lang = navigator.language || navigator.userLanguage || "zh-CN";
  488. if (engine === 'google') {
  489. return GM_xmlhttpRequest({
  490. method: 'POST',
  491. url: `https://translate.google.com/translate_a/single?client=gtx&dj=1&q=${popData.text}&sl=auto&tl=${lang}&hl=${lang}&ie=UTF-8&oe=UTF-8&source=icon&dt=t&dt=bd`,
  492. headers: {
  493. 'Content-Type': 'application/x-www-form-urlencoded',
  494. "Accept-Encoding": "gzip, deflate"
  495. },
  496. timeout: wait,
  497. onload: parseTranslationGoogle,
  498. onerror: ErrHandle,
  499. ontimeout: ErrHandle
  500. });
  501. } else if (engine === 'deepl') {
  502. return GM_xmlhttpRequest({
  503. method: 'POST',
  504. url: "https://api-free.deepl.com/v2/translate??auth_key=aa09f88d-ab75-3488-b8a3-18ad27a35870:fx",
  505. data: "auth_key=aa09f88d-ab75-3488-b8a3-18ad27a35870:fx&target_lang=ZH&text=" + popData.text,
  506. headers: {
  507. 'Content-Type': 'application/x-www-form-urlencoded'
  508. },
  509. timeout: wait,
  510. onload: parseTranslationDeepl,
  511. onerror: ErrHandle,
  512. ontimeout: ErrHandle
  513. });
  514. } else {
  515. return GM_xmlhttpRequest({
  516. method: 'POST',
  517. url: "http://api.interpreter.caiyunai.com/v1/translator",
  518. headers: {
  519. 'Content-Type': 'application/json',
  520. "X-Authorization": "token " + "3975l6lr5pcbvidl6jl2"
  521. },
  522. data: JSON.stringify({
  523. "source": [popData.text],
  524. "trans_type": "auto2zh",
  525. "request_id": "demo",
  526. "detect": true
  527. }),
  528. timeout: wait,
  529. onload: parseTranslationCaiyun,
  530. onerror: ErrHandle,
  531. ontimeout: ErrHandle
  532. });
  533. }
  534. };
  535.  
  536. parseTranslationDeepl = function (responseDetails) {
  537. var RTxt, Result;
  538. if (!popData.bTrans) {
  539. return;
  540. }
  541. try {
  542. RTxt = JSON.parse(responseDetails.responseText);
  543. } catch (error) {
  544. log(JSON.stringify(responseDetails));
  545. return ajaxError(responseDetails);
  546. }
  547. Result = `<div id=\"tranRst\" style=\"font-size:13px;overflow:auto;padding:5px 12px;\"> <div style=\"line-height:200%;font-size:13px;\"> ${RTxt.translations[0].text} </div> </div>`;
  548. $('#transPanel').empty().append(Result).show();
  549. fixPos(document.defaultView.getSelection());
  550. };
  551.  
  552. parseTranslationCaiyun = function (responseDetails) {
  553. var RTxt, Result;
  554. if (!popData.bTrans) {
  555. return;
  556. }
  557. try {
  558. RTxt = JSON.parse(responseDetails.responseText);
  559. log(JSON.stringify(RTxt));
  560. } catch (error) {
  561. return ajaxError(responseDetails);
  562. }
  563. Result = `<div id=\"tranRst\" style=\"font-size:13px;overflow:auto;padding:5px 12px;\"> <div style=\"line-height:200%;font-size:13px;\"> ${RTxt.target[0]} </div> </div>`;
  564. $('#transPanel').empty().append(Result).show();
  565. fixPos(document.defaultView.getSelection());
  566. };
  567.  
  568. parseTranslationGoogle = function (responseDetails) {
  569. var PickMeaning, RLine, RTxt, Result, j, len, line, ref, sentence;
  570. if (!popData.bTrans) {
  571. return;
  572. }
  573. try {
  574. RTxt = JSON.parse(responseDetails.responseText);
  575. } catch (error) {
  576. return ajaxError(responseDetails);
  577. }
  578. RLine = function () {
  579. var j, len, ref, results;
  580. ref = RTxt.sentences;
  581. results = [];
  582. for (j = 0, len = ref.length; j < len; j++) {
  583. sentence = ref[j];
  584. results.push(sentence.trans);
  585. }
  586. return results;
  587. }().toString();
  588. PickMeaning = function (list) {
  589. var i, item, j, len, results;
  590. results = [];
  591. for (i = j = 0, len = list.length; j < len; i = ++j) {
  592. item = list[i];
  593. if (item.score > 0.005 || i < 3) {
  594. results.push(item.word);
  595. }
  596. }
  597. return results;
  598. };
  599. if (RTxt.dict != null) {
  600. ref = RTxt.dict;
  601. for (j = 0, len = ref.length; j < len; j++) {
  602. line = ref[j];
  603. RLine += "<br>" + `${line.pos} : ${PickMeaning(line.entry)}`;
  604. }
  605. }
  606. Result = `<div id=\"tranRst\" style=\"font-size:13px;overflow:auto;padding:5px 12px;\"> <div style=\"line-height:200%;font-size:13px;\"> ${RLine} </div> </div>`;
  607. $('#transPanel').empty().append(Result).show();
  608. fixPos(document.defaultView.getSelection());
  609. };
  610.  
  611. doHideBar = function () {
  612. return $('#ShowUpBox').fadeOut(150);
  613. };
  614.  
  615. hideBar = function (time = 0) {
  616. return popData.fadeEvent.push(setTimeout(doHideBar, time));
  617. };
  618.  
  619. $(document).on("mousedown", function (event) {
  620. popData.mousedownEvent = event;
  621. hideBar();
  622. if (popData.bTrans === 1) {
  623. return PopupInit();
  624. }
  625. });
  626.  
  627. $(document).on("mouseup", function (event) {
  628. // PopupInit() if popData.bTrans == 1
  629. // hideBar() if not GetOpt('Click_st')
  630. if (event.which !== 1) {
  631. return;
  632. }
  633. if (GetOpt('Ctrl_st') && !event.ctrlKey) {
  634. return;
  635. }
  636. return ShowBar(event);
  637. });
  638.  
  639. $(document).on("keydown", function (event) {
  640. if (event.key === "Escape") {
  641. if ($('#ShowUpBox').is(":visible")) {
  642. hideBar();
  643. event.stopPropagation();
  644. return False;
  645. }
  646. }
  647. if (event.ctrlKey && event.altKey && event.key === "p") {
  648. return ShowBar();
  649. }
  650. });
  651.  
  652. eventFromTextbox = function (eventList) {
  653. var event, j, len;
  654. for (j = 0, len = eventList.length; j < len; j++) {
  655. event = eventList[j];
  656. if (event != null) {
  657. if ($(event.target).is('textarea, input, *[contenteditable="true"]')) {
  658. //console.log $(event.target)
  659. return true;
  660. }
  661. }
  662. }
  663. return false;
  664. };
  665.  
  666. InTextBox = function (selection) {
  667. var area, j, len, ref;
  668. if (isChrome()) {
  669. return false;
  670. }
  671. ref = $('textarea, input, *[contenteditable="true"]', document);
  672. for (j = 0, len = ref.length; j < len; j++) {
  673. area = ref[j];
  674. if (selection.containsNode(area, true)) {
  675. return true;
  676. }
  677. }
  678. return false;
  679. };
  680.  
  681. GetTextboxSelection = function () {
  682. var textbox;
  683. textbox = document.activeElement;
  684. if (textbox.selectionEnd - textbox.selectionStart > 0) {
  685. return textbox.value.substring(textbox.selectionStart, textbox.selectionEnd);
  686. }
  687. return "";
  688. };
  689.  
  690. OpenUrl = function (link) {
  691. if (isChrome()) {
  692. //log "chrome"
  693. return GM_openInTab(link, {
  694. active: GetOpt("Focus_st") === 1
  695. });
  696. } else {
  697. return GM_openInTab(link, !GetOpt("Focus_st"));
  698. }
  699. };
  700.  
  701. OnEngine = function (e) {
  702. var link;
  703. link = $(this).data('link');
  704. if (link.indexOf('javascript:') === 0) {
  705. eval(link.slice('javascript:'.length));
  706. return false;
  707. }
  708. OpenUrl(link);
  709. hideBar(100);
  710. return false;
  711. };
  712.  
  713. ShowBar = function (event) {
  714. var do_timeout_hide, e, engine, j, k, l, len, len1, len2, paraList, ref, ref1, ref2, sel, setHref;
  715. hideBar();
  716. sel = document.defaultView.getSelection();
  717. if (InTextBox(sel) || eventFromTextbox([event, popData.mousedownEvent])) {
  718. popData.rawText = GetTextboxSelection().trim();
  719. } else {
  720. popData.rawText = sel.toString().trim();
  721. }
  722. if (GetOpt("AutoCopy_st")) {
  723. if (InTextBox(sel) || eventFromTextbox([event, popData.mousedownEvent])) {
  724. if (GetOpt("AutoCopy_tbox_st")) {
  725. // none text areas?
  726. CopyText(popData.rawText);
  727. }
  728. } else {
  729. CopyText(popData.rawText);
  730. }
  731. }
  732. popData.text = encodeURIComponent(popData.rawText);
  733. if (popData.rawText === '') {
  734. return;
  735. }
  736. if (InTextBox(sel) || eventFromTextbox([event, popData.mousedownEvent])) {
  737. if (GetOpt("Textbox_st")) {
  738. return;
  739. }
  740. }
  741. ref = popData.fadeEvent;
  742. // we have hide event for every mousedown
  743. for (j = 0, len = ref.length; j < len; j++) {
  744. e = ref[j];
  745. clearTimeout(e);
  746. }
  747. $('#transPanel').empty().hide();
  748. paraList = {
  749. "\\${rawText}": popData.rawText,
  750. "\\${text}": popData.text,
  751. "\\${domain}": document.domain,
  752. "\\${url}": location.href
  753. };
  754. setHref = function (engine) {
  755. var $engine, href, para, runFunction, value;
  756. $engine = $("#" + engine.id + "Icon");
  757. if (engine.href != null) {
  758. href = engine.href;
  759. for (para in paraList) {
  760. if (!hasProp.call(paraList, para)) continue;
  761. value = paraList[para];
  762. href = href.replace(RegExp(`${para}`, "g"), value);
  763. }
  764. $engine.data('link', href);
  765. $engine.off('click');
  766. return $engine.on('click', OnEngine);
  767. } else if (engine.action != null) {
  768. $engine.off('click');
  769. return $engine.on('click', engine.action);
  770. } else if (engine.function != null) {
  771. log("func " + engine.id + " : " + engine.function);
  772. runFunction = function (func) {
  773. console.log(popData.rawText, popData.text, document.domain, location.url);
  774. return Function('"use strict";return (' + func + ')')()(popData.rawText, popData.text, document.domain, location.url, OpenUrl);
  775. };
  776. $engine.off('click');
  777. return $engine.on('click', function () {
  778. // func.apply(null, [popData.rawText, popData.text, popData.domain, popData.url])
  779. runFunction("function action(rawText, text, domain, url, OpenUrl) {" + engine.function + "}");
  780. hideBar(100);
  781. return false;
  782. });
  783. } else {
  784. return console.log('empty engine', engine);
  785. }
  786. };
  787. ref1 = popData.engines;
  788. for (k = 0, len1 = ref1.length; k < len1; k++) {
  789. engine = ref1[k];
  790. setHref(engine);
  791. }
  792. ref2 = popData.userEngines;
  793. for (l = 0, len2 = ref2.length; l < len2; l++) {
  794. engine = ref2[l];
  795. setHref(engine);
  796. }
  797. if (needPrefix(popData.rawText)) {
  798. $('#Open_stIcon').data('link', `http://${popData.rawText}`);
  799. }
  800. popData.mouseIn = 0;
  801. popData.bTrans = 0;
  802. do_timeout_hide = function () {
  803. if (popData.mouseIn === 0 && !popData.bTrans) {
  804. return $('#ShowUpBox').fadeOut(250);
  805. }
  806. };
  807. if (GetOpt("Fade_st")) {
  808. popData.fadeEvent.push(setTimeout(do_timeout_hide, 5000));
  809. }
  810. fixPos(sel, event);
  811. return $('#ShowUpBox').css('opacity', 0.9).fadeIn(200);
  812. };
  813.  
  814. needPrefix = function (url) {
  815. var j, len, prefix, urlPrefixes;
  816. url = url.trim();
  817. urlPrefixes = ['http://', 'https://', 'ftp://', 'file://', 'thunder://', 'ed2k://', 'chrome://'];
  818. for (j = 0, len = urlPrefixes.length; j < len; j++) {
  819. prefix = urlPrefixes[j];
  820. if (url.indexOf(prefix) === 0) {
  821. return 0;
  822. }
  823. }
  824. return 1;
  825. };
  826.  
  827. CopyText = function (selText) {
  828. var e;
  829. if (selText == null) {
  830. selText = popData.rawText;
  831. }
  832. if (selText === '') {
  833. return;
  834. }
  835. if ((typeof GM_info !== "undefined" && GM_info !== null ? GM_info.scriptHandler : void 0) === "Violentmonkey") {
  836. return document.execCommand('copy');
  837. }
  838. try {
  839. return GM_setClipboard(selText, "text");
  840. } catch (error) {
  841. e = error;
  842. console.log(e);
  843. return document.execCommand('copy');
  844. }
  845. };
  846.  
  847. GetOpt = function (id) {
  848. var ref;
  849. return GM_getValue(id, (ref = popData.optionList.find(function (item) {
  850. return item.id === id;
  851. })) != null ? ref.defaultValue : void 0);
  852. };
  853.  
  854. SaveOpt = function (id) {
  855. return GM_setValue(id, $("#" + id + " > input").prop("checked") + 0);
  856. };
  857.  
  858. ReadOpt = function (id) {
  859. return $("#" + id + " > input").prop("checked", GetOpt(id));
  860. };
  861.  
  862. OpenSet = function () {
  863. if ($('#popup_setting_bg').length === 0) {
  864. SettingWin();
  865. }
  866. return $('#popup_setting_bg').fadeIn(400);
  867. };
  868.  
  869. SettingWin = function () {
  870. var engine, engineOptionList, exampleJSON, generateEngineOption, generateOption, item, j, len, option, optionList, ref;
  871. addAdditionalCSS();
  872. $('#popup_setting_bg').remove();
  873. generateOption = function (option) {
  874. 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>`;
  875. };
  876. optionList = function () {
  877. var j, len, ref, results;
  878. ref = popData.optionList;
  879. results = [];
  880. for (j = 0, len = ref.length; j < len; j++) {
  881. option = ref[j];
  882. results.push(generateOption(option));
  883. }
  884. return results;
  885. }().join(' ');
  886. generateEngineOption = function (engine) {
  887. 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>`;
  888. };
  889. engineOptionList = function () {
  890. var j, len, ref, results;
  891. ref = popData.engines;
  892. results = [];
  893. for (j = 0, len = ref.length; j < len; j++) {
  894. engine = ref[j];
  895. results.push(generateEngineOption(engine));
  896. }
  897. return results;
  898. }().join(' ');
  899. exampleJSON = JSON.stringify(popData.defaultEngines, null, 4);
  900. $("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'>选项 / General</div> <div id='popup_tab2' class='popup_tab'>搜索引擎 / Engines</div> <div id='popup_tab3' class='popup_tab'>自定义 / Customize</div> <div id='popup_tab4' class='popup_tab'>关于 / 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>请阅读帮助! / Read help FRIST !</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'>中文</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> ${exampleJSON} </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> When using 'function' style, all above variable is usable. Besides, you can directly call 'OpenUrl' to open a link. Note: You can't modify built-in engines directly, however, you can disable them and add your own. </div> <div id='chsContent'> 自定义引擎内容应当是合法的JSON格式, 如下 <pre> ${exampleJSON} </pre> 每一项的 id 必须各不相同且不能含有空格, title 和 description 可以随意填写, src 是该项的图标, 可以是指向图标的 url 或者是一个 <a href='http://dataurl.net/#about'>DataURL</a>. href 是引擎的 url 链接, 其中可以包含诸如 \${text} 这样的变量, 变量的大小写必须正确, 可用的变量有: <ul> <li>\${text} : 代表选中文字, 经过 url encoding, 一般应当使用此项</li> <li>\${rawText} : 代表未经 encoding 的原始选中文字</li> <li>\${domain} : 代表当前页面的域名</li> <li>\${url} : 代表当前页面的 url 地址</li> </ul> 当使用function的时候, 以上变量都可以直接调用. 此外, 可以直接调用OpenUrl函数来打开新链接 注意: 内置引擎无法直接修改, 你可以禁用它们然后添加你自定义的引擎 </div> </div> <div id='help_btnArea'> <div id='popup_help_close' class='setting_btn'>Close</div> </div> </div> </div> </div> </div>`);
  901. $("#popup_setting_bg, #popup_help_bg").hide();
  902. $("#tabs_box > .popup_tab").on("click", function (e) {
  903. $("#tabs_box > .popup_tab").removeClass("popup_selected");
  904. $(this).addClass("popup_selected");
  905. $("#option_box > div").hide();
  906. return $("#" + $(this).attr("id") + "Page").show();
  907. });
  908. $("#option_box > div").hide();
  909. $("#tabs_box > .popup_tab.popup_selected").click();
  910. $("#chsContent").hide();
  911. $("#engHead").on('click', function (event) {
  912. $("#engHead").addClass("popup_head_selected");
  913. $("#chsHead").removeClass("popup_head_selected");
  914. $("#engContent").show();
  915. return $("#chsContent").hide();
  916. });
  917. $("#chsHead").on('click', function (event) {
  918. $("#engHead").removeClass("popup_head_selected");
  919. $("#chsHead").addClass("popup_head_selected");
  920. $("#engContent").hide();
  921. return $("#chsContent").show();
  922. });
  923. ref = $("#popup_setting_win .setting_item");
  924. for (j = 0, len = ref.length; j < len; j++) {
  925. item = ref[j];
  926. if (item != null) {
  927. ReadOpt(item.id);
  928. }
  929. }
  930. $("#popup_engines").val(GM_getValue("engineString", popData.defaultEngineString));
  931. $("#popReset").click(function () {
  932. if (confirm("Reset?")) {
  933. return $("#popup_engines").val(popData.defaultEngineString);
  934. }
  935. });
  936. $("#popHelp").click(function () {
  937. return $("#popup_help_bg").fadeIn();
  938. });
  939. if (!GetOpt("userEngine_st")) {
  940. $("#popup_engines").val(`Disabled, please enable custom engines in setting,
  941. then save and re-open this setting page\n
  942. 已禁用, 请在设置启用自定义引擎, 保存并重新打开此界面`);
  943. $("#popup_engines").attr('disabled', true);
  944. }
  945. $("#popup_save").click(function () {
  946. var k, len1, ref1, userEngineString;
  947. ref1 = $("#popup_setting_win .setting_item");
  948. for (k = 0, len1 = ref1.length; k < len1; k++) {
  949. item = ref1[k];
  950. if (item != null) {
  951. SaveOpt(item.id);
  952. }
  953. }
  954. if (GetOpt("userEngine_st")) {
  955. userEngineString = $("#popup_engines").val();
  956. if (userEngineString !== "") {
  957. try {
  958. popData.userEngines = JSON.parse(userEngineString);
  959. GM_setValue("engineString", userEngineString);
  960. } catch (error) {
  961. alert("自定义引擎错误!请检查\nEngine config Error!");
  962. log(userEngineString);
  963. }
  964. }
  965. }
  966. return $("#popup_setting_bg").fadeOut(300, function () {
  967. $("#popup_setting_bg").remove(); //force rebuild setting window
  968. return PopupInit(); //rebuild toolbar
  969. });
  970. });
  971. $("#popup_close, #popup_setting_bg").click(function () {
  972. return $("#popup_setting_bg").fadeOut(300, function () {
  973. return $("#popup_setting_bg").remove();
  974. });
  975. });
  976. $("#popup_help_bg, #popup_help_close").on("click", function (e) {
  977. return $("#popup_help_bg").fadeOut();
  978. });
  979. return $('#popup_setting_win, #popup_help_win, #popup_help_bg').click(function (e) {
  980. return e.stopPropagation();
  981. });
  982. };
  983.  
  984. UpdateLog = function () {
  985. addAdditionalCSS();
  986. $("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>");
  987. $('#popup_update_open').on('click', function (event) {
  988. UpdateNotified();
  989. $("#popup_update_bg").hide();
  990. OpenSet();
  991. });
  992. return $('#popup_update_close').on('click', function (event) {
  993. UpdateNotified();
  994. $("#popup_update_bg").hide();
  995. });
  996. };
  997.  
  998. UpdateNotified = function () {
  999. return GM_setValue("UpdateAlert", popData.codeVersion);
  1000. };
  1001.  
  1002. PopupLoad = function () {
  1003. var engine, j, k, len, len1, option, popupMenu, ref, ref1, setDefault, userEngineString;
  1004. if (window.self !== window.top || window.frameElement) {
  1005. if (!GM_getValue("Iframe_st", 0)) {
  1006. return;
  1007. }
  1008. }
  1009. addCSS();
  1010. if (GM_getValue("UpdateAlert", 0) < popData.codeVersion) {
  1011. setDefault = function (key, defaultValue) {
  1012. return GM_setValue(key, GM_getValue(key, defaultValue));
  1013. };
  1014. ref = popData.optionList;
  1015. for (j = 0, len = ref.length; j < len; j++) {
  1016. option = ref[j];
  1017. setDefault(option.id, option.defaultValue);
  1018. }
  1019. ref1 = popData.engines;
  1020. for (k = 0, len1 = ref1.length; k < len1; k++) {
  1021. engine = ref1[k];
  1022. setDefault(engine.id, engine.defaultState);
  1023. }
  1024. UpdateLog();
  1025. }
  1026. popData.defaultEngineString = JSON.stringify(popData.defaultEngines, null, 4);
  1027. if (GetOpt("userEngine_st")) {
  1028. userEngineString = GM_getValue("engineString", popData.defaultEngineString);
  1029. try {
  1030. popData.userEngines = JSON.parse(userEngineString);
  1031. } catch (error) {
  1032. //alert "User Engine Syntax Error"
  1033. console.error(userEngineString);
  1034. }
  1035. }
  1036. PopupInit();
  1037. GM_registerMenuCommand("Popup Search Setting / 设置", OpenSet, 'p');
  1038. if (GM_getValue("PopupMenu", 0)) {
  1039. popupMenu = document.body.appendChild(document.createElement("menu"));
  1040. popupMenu.outerHTML = '<menu id="userscript-popup" type="context"><menuitem id="PopupSet" label="Popup Search设置"></menuitem></menu>';
  1041. document.querySelector("#PopupSet").addEventListener("click", OpenSet, false);
  1042. return $(document).on("contextmenu", function () {
  1043. return document.body.setAttribute("contextmenu", "userscript-popup");
  1044. });
  1045. }
  1046. };
  1047.  
  1048. setTimeout(PopupLoad, 100);
  1049.  
  1050. addCSS = function () {
  1051. return GM_addStyle(`#ShowUpBox { width: auto; height: auto; position: absolute; z-index: 10240; color: black; display: inline-block; line-height: 0; vertical-align: baseline; box-sizing: content-box; font-size: 16px; } #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 { 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 { margin: 0px 2px; } #popupWrapper img { 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; }`);
  1052. };
  1053.  
  1054. addAdditionalCSS = function () {
  1055. if (popData.additionalCSSLoaded === 1) {
  1056. return;
  1057. }
  1058. popData.additionalCSSLoaded = 1;
  1059. return GM_addStyle("#popup_setting_bg { 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 { font-size: 16px; 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: 22px; font-weight: bold; text-align: center; padding: 12px; background: #16A085; color: white; flex-shrink: 0; } #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: 24px; 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: 14px; } #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 { font-size: 16px; 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: 3px solid #f2f2f2; border-radius: 0.5em; } .tgl-flat+.tgl-btn:after { -webkit-transition: all .2s ease; transition: all .2s ease; background: #f2f2f2; content: \"\"; border-radius: 0.25em; } .tgl-flat:checked+.tgl-btn { border: 3px solid #1ABC9C; } .tgl-flat:checked+.tgl-btn:after { left: 50%; background: #1ABC9C; }");
  1060. };
  1061.  
  1062. getLastRange = function (selection) {
  1063. var j, rangeNum, ref;
  1064. for (rangeNum = j = ref = selection.rangeCount - 1; ref <= 0 ? j <= 0 : j >= 0; rangeNum = ref <= 0 ? ++j : --j) {
  1065. if (!selection.getRangeAt(rangeNum).collapsed) {
  1066. return selection.getRangeAt(rangeNum);
  1067. }
  1068. }
  1069. return selection.getRangeAt(selection.rangeCount - 1);
  1070. };
  1071.  
  1072. get_selection_offsets = function (selection, e) {
  1073. var $test_span, Rect, lastRange, newRange;
  1074. try {
  1075. $test_span = $('<span style="display:inline;">x</span>');
  1076. // "x" because it must have a height
  1077. lastRange = getLastRange(selection);
  1078. newRange = document.createRange();
  1079. newRange.setStart(lastRange.endContainer, lastRange.endOffset);
  1080. newRange.insertNode($test_span[0]);
  1081. Rect = $test_span[0].getBoundingClientRect();
  1082. $test_span.remove();
  1083. return [Rect.top + window.scrollY, Rect.left + window.scrollX, 0, 0];
  1084. } catch (error) {
  1085. return [e.pageY, e.pageX, 0, 0];
  1086. }
  1087. };