Popup Search

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

当前为 2017-09-23 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Popup Search
  3. // @author lkytal
  4. // @namespace Lkytal
  5. // @homepage https://lkytal.github.io/
  6. // @description Popup search box and translate button (etc) for selected texts
  7. // @include *
  8. // @exclude */test/*.html*
  9. // @exclude http://acid3.acidtests.org/*
  10. // @exclude http://www.acfun.tv/*
  11. // @exclude http://www.sf-express.com/*
  12. // @exclude http://furk.net/*
  13. // @require https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js
  14. // @version 4.2.2
  15. // @icon http://lkytal.qiniudn.com/search.png
  16. // @grant GM_xmlhttpRequest
  17. // @grant GM_addStyle
  18. // @grant unsafeWindow
  19. // @grant GM_openInTab
  20. // @grant GM_setClipboard
  21. // @grant GM_download
  22. // @grant GM_getValue
  23. // @grant GM_setValue
  24. // @grant GM_registerMenuCommand
  25. // @charset UTF-8
  26. // @homepageURL https://git.oschina.net/coldfire/GM
  27. // ==/UserScript==
  28.  
  29. "use strict";;
  30. var CopyText, GetOpt, InTextBox, OnEngine, OpenSet, PopupInit, PopupLoad, ReadOpt, SaveOpt, SettingWin, ShowBar, TimeOutHide, UpdateLog, UpdateNotified, addAdditionalCSS, addCSS, ajaxError, doRequest, eventFromTextbox, fixPos, getLastRange, get_selection_offsets, isChrome, log, needPrefix, onTranslate, parseTranslationGoogle, popData,
  31. hasProp = {}.hasOwnProperty;
  32.  
  33. window.$ = this.$ = this.jQuery = jQuery.noConflict(true);
  34.  
  35. popData = {
  36. count: 0,
  37. mouseIn: 0,
  38. bTrans: 0,
  39. additionalCSSLoaded: 0,
  40. codeVersion: 8,
  41. text: "",
  42. mousedownEvent: null,
  43. icons: {
  44. 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=",
  45. bingIcon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACeklEQVRYhe2Wy2sTURTGu1fapOZRTKj2kaag1VaTNA9NjHkWLS3diC5q6wNc+A+EIkVw40ZRFBeuirgQF1JfuFBboYiIzb2TmdimCA0YWyupqalBTRo/F4M3KE0mhrR2kQsfDHPvOfOb794zZ6qErlb8T1VVACoAFYANDcD7dKAWFahFBd7TvL4AvE8HobsNqSmK1FuC6WP71gQiP4C3GeGe3fg9Zk54EHI35ub9evBenSi/fm0AhJ5dDCAy4Abn0ILa1CCGGlCrCsLhnRAO7QAxK0CMMlBb3R+QZQUId7ch0u9EYuwBVhs/s1l8fnIX00dtIEY5eF9LeQG+RWfYdeLZKGaHTiLS70TkuAvR4TP48vIpm19+MwFqURZ1ZooGAIAf8+/B2TWgZgVCzm0IuRtFHagH6awF72vBytek6EgmDWpVSTpRNEA2k0awYxN4T1PeZCFXA6hZwWKWxh+CWtXlAYhdHgK3f6ukpdSqxqfb11kcMckLVknhMuxtZ4lmA4MIOeslATiHFrFLARbH2TUFtyE/gF8PYpKzRIuP7oAYZZIAwY7NWJ6cEM/BSgbEIINQigNCVys4uwZz187nPkan/CCdW1Z9I96rAzHIMBsYZOuj505Lula4F/j1CO6tRnz0Fku6MHIF1KIEMclBrSpQqwrEKANn1yJ+b4Stm795EcRUW3oZ/r0V7872IZOI50ryYwzJV2NIvh5HenGB3f8eiyIy4AK1KCUfXhQAK7GD2xHcU42pI2bM3biApRePkQoHkQpPIvH8Pj5cHUa4tx3EUIOQq6GonP8EIEoP3tPEegK1KEXZ6sA5tCV1y439Q1IBqABUANZDvwDe9YuA3jr3dgAAAABJRU5ErkJggg==",
  46. 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==",
  47. 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==",
  48. 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",
  49. taobaoIcon: "data:image/png;base64,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",
  50. 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",
  51. wikiIcon: "data:image/png;base64,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",
  52. 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=",
  53. 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",
  54. doubanIcon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAEOSURBVFhH7ZI/C4FRGMXNNqsMNoPB5BuZZVMymERZfA+DkiKRjyBS/iySKIOMyvBwuLfe9zpEb+9Fvad+y7nnee7pdkOhfES+CjVtQk2bUNMmprE6rMUvYbd5X1Ag+IRPC4y2E/Vw3oVd7I4b1LzyUwVm+6WUepWPwIyW5wLNaZtmXoEZraDA/xf4+if0qv8soOnM+2qNyPq4kXgl9RJktDDLdrqgpoNMI6vW3ZWopWkO4MwpzLKcC2o6iJWTat1duVaB5gDOnMIsy7mgpsF4N1UrRbqLAc0AnGlhhmUeoKZBdVhXa0VO55OEi9GHDDycaWHGzFBMw2+Z9wUF3voDvkJNm1DTJtS0CTWtEZELQLQd2odfLaoAAAAASUVORK5CYII=",
  55. 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==",
  56. 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=",
  57. 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",
  58. tiebaIcon: "data:image/png;base64,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",
  59. inSiteIcon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAF70lEQVRYR41XS2yUVRT+5tHOg04pVEqtFPFJS2M1hIjxkRhjNJHEsNC40I0bDWpIdKNuscjWYExcuHHj1oUkPgCNLgiJiQvqAwwBDTRAm1oHy7Sd6fzj+c495++doa02DP/7nu9833fOvTeDia9aQAZI5JeVU/2T8xZvZ+Uol7zfknM9yrOM/Nb6ayXhuQ4l5xw340d+H8LJYPo8g4mvQ1T9nw/tYwbXFy1YHHRdAJ4Eg6UDh8CKScBwTA4r9zJ47xt/cyV7PiQAje8A/DoC5eBCpFUCxiAkMF9TIJ5kCoCoGMAY4AtZvmR0K4acfGcfxxiMyrUBmGytpiVoMnBsJZkMULcsA1jG+jCSgCwoE0ZdmrmNGR+cao7JhDxrvXYGeD/4IgBgZk55gBUAaEAPHJlvLQ+0aU7KIwlUe0Wj3lQAch5M2JaxAVATMqhpn2NFrAMiDe5ZOwAP6oy4BMETxoBlzAA50z4N6EDcD16CERin3SnXLFcL6MGZPD2hDLAKGFg8EFNOACqHBWqTxLwSV4EzoEcJ3uSwUbZN9gfTXqURAOqBw8cDAFJN5yvlbsJVrh2kEuFsxOZSpwUGNJAxodeRLEnKgABglqwCLz8FYwwQFJnQqog9YN7wCnAZGsvI5Rm7JRgiAGRAwRgIA2gMyGBKuWVMACoJbzGwXWsb6PSCmbsuGS0u4cWxCkY3dePj36q4vMBSI8GUxBoRM0+v6YHDJ1vaS5R6CUoTOgMeXD3S4Ql+xMHRxO3lLF7YUcRroxX0F/M4dmEOL393BYu58oruKQPGil43CeCEwIgYUCnia2NAJTCWxGAkaKwvj5fuLuHZ7RX0CJDpG4sYGezD0R+n8M7pGWBDz4oX3ANaHTRgkMIAMHOv/w4Aep9dUo6NBIVCBo8PFvHcnT14dKCEkS0lnLtaxdXrNYzd2o9iVw5vnjyPT87WBIAw0FwOGjFjrQ5KYNfiiZsBUAZmSykgbrLA/PCR7WVM7B3EeH8Bvd055LvymJz6C2emZvHU6DA2FrtQXarj+c9/xfez8m2hywILCJalTs8CQE/bJHAGzNmUgQCSHDYXM3h1tA9v79mKjZUCkqWmlG9GHX7qj2s4fWEabz0xrq5nwfz59wIe/GwSc1mhn+wxY1L+/wDQjLEEwGBXggM7N+DpHZtw39BmlMsF1Bbr+PKXyzg7U8W7T94vyiQKqCT0Hz8/jWe+uIDlQsWoDvX+HxKY6bTEIgBKfx2o3cBtxWXs3VrCwYfuwkytjnPXqnj9sVH0Cu3LWg1At8jy0amLeOOHK6K/ANDGY7/UAzeZMCpDBveG46535zcawMI8hgtLOLB7GPtGhjC+7ZbQKyRIUwLk8nkcPHYGH/78D4Qq07wDgHdHNSP/vS+dkOs9dbt1vbQsvQKsD4g3CvV5fPDwIC7NzuHIiUkc2bcb+3dtwz0DvdJM89h59Fv83hD9xaCp4bTvWxV4i7ayXJkLfDLySUcXKN4ZbW6Q/pBN6thVauLS/BKqDXmnNo+hcoL9927BK3vuwAOf/gRUjBl1fTQdKxCfoNK5QBpR2gnZ842FtDVHnTGsJMUXUlZ5VoqUGTWWFozadQz05DGdFKT8SpH+1vk6Jyf1hDYiSsAu7BlT1MgLujQ3CXx1xFcUaDQbckDWuDIYT7vGgJtQPeDTsS9Ktfx9TWjtNp39vDf4ZGVBYzC+mGWWfOyzoAdLp2ebCb0TytH2BfG8b5nFC5DYC+stTHVKDiW59oqI1IfKad8XdC5CnQEP6GtE/Vrrp/3P4gb6LYCeRz9lwkCmAA7JojTVk26XHz9qW6JxTjePrAVAs3IU7Hz8xoJHGacAdV3AJdkh7g1jU1l23oA0U18JxSui9RhgErYRcVl0T2gMOEPCsqyKbW+oe0K+ZB7o3IjEy7E2Caw0OyXQpZemHnnCWeK9kGi0N3RdSZtJERuubTNi73pQw5AGS+UwP6QSMC5ZCPEDt+4BLSHWPOXQ/8LLPJIZNall4LUeq6CbFqNYwUYMcIvOa5eTsdRrwL/RZz0YRuay+AAAAABJRU5ErkJggg==',
  60. settingIcon: "data:image/png;base64,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",
  61. tipDown: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAXElEQVQYlYXMsQ5AQBREUSoVjQ+f+S0lSi2livJlr4ZEZDcmud3JVJIW2yPQVqXZPmwjaQXqEuJJ0vCLbrgDfRZFxBsH0GTRCybbcxF9HhPQZdEHbkUUEUg6JU0Xm2KvCU6v27kAAAAASUVORK5CYII=",
  62. tipUp: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAZElEQVQYlXXMIQ4CMBBE0UWhwHDw+ddCAhILEgWy4WNo0tAyyZidly1AwNba1CSvJOf6h/oduC/RAN7qfkJ9BC7VM6LhQ1O3E+pN8lAPNeYHHGsV4PkFN3WzREmuwEndLUFVfQC3Xa8Jl+92RAAAAABJRU5ErkJggg==",
  63. pending: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACGFjVEwAAAANAAAAAHHdBKEAAAAaZmNUTAAAAAAAAAAQAAAAEAAAAAAAAAAAAB4D6AAAOSVkVgAAAZ9JREFUOI2Nkr9r01EUxT+x2CBuXQS1oNAObv4B9l/QqSii4NAqRIMp6qAJvHeDCiIIZhPRoYNDqLiFipH8uCeuHdSpXRXpqoNbHL5fY5oXtQfe8O6579x77rswidA5TrlVTOK33h4mdE4k8TEUiP6A+mCIaSlhTedy7iFQSJ9H36A+GBK1RmjOJny5VST6zVzk9eTjvZWvPjtI8IvcbR9JLfqZsU6A0FnIKvv17K6jmD4R/QP32scAWGsewvSGau9kZqdfoj4YEjoLEP0Rpl2WmzMZ6VuYV9IZ+G3MtwBYbs5g2iXqMZg+YnqRWelfxvQ+HdBvq2oTdCkXfI7pM5i+E1XOg0+wfin1HQ7kfGVUzPwGph9g+kbQlSyxOTtKHscfexVML/NuzmPahrA5N0r4H2rdUwSdToT3oNqbJ+jsvgSnotqbx3wH0zuiX8P6JUyvCJtz+xcpt4oErWBax7RO1OrU7UxgWsp/YcquUyCqTOhf+LtA1J18Tb9i3iBoJevEG5h/yTi//+8uat1Fop5i2sb0Mzu+g3mDWndxMv0Xd/7J/PC3XHUAAAAaZmNUTAAAAAEAAAAQAAAAEAAAAAAAAAAAAB4D6AAAolaOggAAAZlmZEFUAAAAAjiNjZI/a1RREMV/JgTSBD+Ahf82dgELwSZ+AjshgpAUgWXFRHAtRHAD986TFNqI0WbxT6GYIuQbJOElb87aiigiaGuTxsIUdmvxHm/j27dLDly43Jk5c87cgZMg+A1ML+nsnR2d1OpOEXWHB5oZJtAipiOSXp/o6/UE0bdJen2CLtfGF7YmiX6vINmuFq+T9PqYrg3UZEtEPQZOVezM/68kpI3iYRWAR7tnMH0l+kcSbx0rvEBIzwFg2UquNm1A9CeYDlnYmsyD/gnz9rDF7Bamz6Ud0yHmT8H0BdObImkJ0179kICoXYIWi0avMP8Opj+Y3wWgc3A+l1VBCBNFURvT6/x+cD2/m45K/6MwsNcu1ZYwfSNRdyi5DubvidlyRZ7PE7JLxwg/YNlKLcHDndOEdHqsWjq6iOkHph2i3ybqPmv7c+OLqgjpNEFNTO8wbRJ0ZaAwuzpyW4F8Bq3uVD2xmsXGvh3T3W9i+o35BkFNgppEPcf8V76xelZ+6wj5DaJeFHP4mx//ifkGa/uz1fR/oqjJFLqwpRgAAAAaZmNUTAAAAAMAAAAQAAAAEAAAAAAAAAAAAB4D6AAAT8BdawAAAZ5mZEFUAAAABDiNhZIxa1RBFIU/shoUsRNExIgQBG0tFFTwJ9gsooUgrGlijEFE3RVm7oMgpEgQEQzEQqx8FjY2YnTduWf/QUgTsbMJdlrYrcU+nuY9XnJhmuGeb865c2GvMr3HtEXUU3qfT+7ZX6uoa5heY/pJNhwRfbHeNLO6H/Mlgk81gtp5i+jzZMMRpneVV3yRbDgi83MlMKbrmL8hpluVSJd3Ogn96eJiFoDu+nFMG0QJU5fgl+qxfJZsOCL0p8F8CdM2IUwQ+vswbWLpbk30QIcxvSTkk7TzFqZtolbAtIFpDYDe4ASmrHmgngh+Y+w8XSX4FTD9wvxOowgghIkxQAvlY/8N5XeZv6naeatwMI/pVRWwSaZVAB6vH8X83i4RvhD8ZgXgy/+GmE8WW3e7Jl7IDxL1gvsfD1XypbOYPypt9ganMG1h+kTUHJYu1mDBL9AdHGvOHPoHCOpgekvU3E7H6XyxNw+bAY1gdcZifSh/psHBEcyXyXyGoA5RzzD/UYhXdhcDPPl6BtN3TH/Gx78R9ZyQTldb/wKgsMsaKa72kwAAABpmY1RMAAAABQAAABAAAAAQAAAAAAAAAAAAHgPoAACiCi8RAAABo2ZkQVQAAAAGOI2Vk71rVFEQxX/mQ11FsLPxA0HEP0FQIf9DCKiFICRRiCu7EQvdYu48FEFBISC4SCorn52IICpL3pz9B4SkMZ2ICFZiKazFe27Mrs+P083cOeeembkX6mC9/bg+4PEV1zuS7mBxuLb+NwJTpLiEaxnXKq4vZP0BHrf+XeRXzOWTeLRKET3bfuhaxmJmGC92p0nFOTyekIqLI7VnyPoDUtz+afVYZe1KFR/EtU6ScN3E4vSYmxRLZP0BnbdHIOkers+YTWC9KVwbeHF1jHRd+3A9wvKd2PM9WMyw2J0G1zoejwHorB3CldXOIUWBxfnR/r+RYqmWBGA2UQqoPbzsvwTm8smyNlq4VkcFNsjUBeDGmwN4tGqFXD0sLowk4z6uTwA0X+7CY5OkhTFyO2+Q9JB23qCdN3DNcu3VXrDeiWqvZRudtaO43uN6TVITL06NiSUtkPUHWHG8SoRjxdlhgfV2Y5rH9ZSk5jayxcnq3dytbbUWpvnSrV4AO/5OcM3iuozHCh4fK/KD4Vr/iPLzbOL6Xs4kVrZ63sIPq0LKOBaKw/8AAAAaZmNUTAAAAAcAAAAQAAAAEAAAAAAAAAAAAB4D6AAAT5z8+AAAAatmZEFUAAAACDiNjZO/a9NRFMU/sQSK4OIkiAVR/DHpIro4uotQpGDp0qagS624mMB794s4VJCiIIRGhI4pOIhDhULa7z35ByTq4CzWQXBwj8P7mpDkG+mFt9x7OPeee+6Dsgh+A9NXTL+L9wnTM4LPleInCTrnMW0T9RDzNUxvMP0i6/Yxf3o0kvGYb89gvpZItPN/cK1ZJeYLmFqYv6Wxf3lQM90k6/aJvjocN+ruAFA/OIPpM1Ei+iPMGzR0cVSirvJYJwpG38D0k/n2DABR7zCtl04Wdk8SOrOjSVMPU2sIen8cqJQSmNoE3RtP/iH6g2nrSKThWIFdx3xrksDy+wnYOcWTvdMTBP/kJUtbo0XTFzI1AYi+RNTu1EnMPxJ9KWHzRYLfAfMXmH4AleS1ekStTMrIb2PqFXIqmA6JegWhc4ms2ydoGYD6wVlM34jaK7qlhQafo65zqbtWyLr9ob1Rz9OF7V8rdjFL9FVMm9Sa1VEZ+fXipDeGyVqzimmbhl+Zqh8gaDldoT4wzeqSxd3C/DXm34t/sDlw5YgEW5gOMX9JyC+Ml/8CnOPJYMU7mq0AAAAaZmNUTAAAAAkAAAAQAAAAEAAAAAAAAAAAAB4D6AAAou/NpAAAAaNmZEFUAAAACjiNjZM/a5RBEMZ/MSoRaxtBjYJGG8HCPx/AxlpSRMQiGhFFOKMgcge7c4iGEEhjkeiZ0uJASKFgCr27d577AAYlhb3YCBYKdmfxbl713rsjAwszu/M8M/vsLPRb8GNEPcW0ielHWh8xPSH44VJ+yUzzmH5jeol5JV9aw/SdereH+ePRBKE1wb3mvtL+dHMc80pOooXRJDdX9xD8CqYGpgYxm2G6OZ532D5L9f2R4eBq5xCmLUyOaZ7oDzG94v7G/sGAWvsUj7IDf2NNEXR1dIv/mukzpmc7yg3ZaWrtM/0EP4l+J0Vjg4FhV57rDzB/0U/wC8tuJ3+B4LMlgkJAr2BqpNzLRF8nCbYCQPTrRL0begXzDYJfS/5zTFsQtYzpa1HJ9ImouRI46i6mzXSdMUzfMC1BaJ2k3u0RdAOAaucopi9E/1CMbmjtxvSakJ1IZHPUuz1qmtrWYSkn6ZxLgAlMtwitybKgfiGN9OL/Kpu/zQ+y80M12K4c9YbSi4XmXqICQQcHiHep+ExRy8Wz7tiCX8S0Rq19vP/oD5IjysBjq0pjAAAAGmZjVEwAAAALAAAAEAAAABAAAAAAAAAAAAAeA+gAAE95Hk0AAAGmZmRBVAAAAAw4jZWSvWtUURDFf242YKHEXvCrCf4DksJGe8sFERQkuqCEqImyYBbmzisUJKCpJCSidVpBwSgv++ZsIVaGgL2IWCgIYr0Wb7MkebtRB25x75w558zcgb2x8O44SQ9xbeL62T8fcT3A4lgFvys82mTdHq7vuFbxuE3SHVzPcP0oc8XsaIJUXCZFi8baWCVneR2Pu7jO7e8CoLk8jsWlvosVrLhIc3n874WDVvQC13tcc6SYx+MDSUv/TtBan8CsNrg31saw/NBw8E7g/4RZjdb6BLg+4dEAIMU0FlMjRaxzHo+ZEltcxfUVXL/x4iYAHs9JcatCsP0rKeZxrZbYYhbXr9JBiqc7WF+PtJ30BosrfbEVXFvgelJa6Su5tki6PqT4Bq5NzGqY1XB9w7UI7Y3TZN0eKaYBWOicxPWFFK1BsWsO12csPwFAFk2ybo+2JrcBi2TdHtY5Uw4rPzIAA9x/e7ScOGAxVa50PNo95aRXJYmuYXm90oLl9YGy6yVwoDrppKU++4UqQZwtW9Xj/XenrUnu6fAQBwexOLX3+Q9jwc9OVBVYYgAAABpmY1RMAAAADQAAABAAAAAQAAAAAAAAAAAAHgPoAACis2w3AAABrmZkQVQAAAAOOI2Nkz9rFFEUxX+7MZjOwsqAfwqNCJJGEMUP4BdwQbEQFVcUEqOCill4705hEAxoJWs0YpvCQjCCQSc79+wHSNgqvYVgIQq2azHj6u5kJAcG5r17zrn3HngwivlPB4lawLSJ6XvxbRC1QPADJf4/qGF6RNLtY/qG6SXmc0TdxrSM6RchO1ctN3+Ri7NZQqiX6iGdIKS7qg0SP4FlZwBotseJulhMsUTIzv9fPIoHa3uJeovpHtHvEiVMPR529u3cZBQxu8B8Z//gHNLDBD81TArpcVrrR3ZkaHqFaXP0chnzuRL5T6gh1Gm2x/OJ/BbmPyBRG+uczQ38NVEzJYPGylhez24SfbH4n8X0E0xbRH9e7HkZ04fKsaM+Ev1S0WwJUw9MTzH/Muhk6hH9+jbiG8XONUKoY/qK6Qm01o+RdPsEvwJAS0cxf8/M6u58b00S/TOmLUJ6CIDEm7kmmyrcfTG/6JwsB6hJoq4R0oki6NMk3T7RHw+nHLVaFK5WZhCy6Zyjd0BtuNhYGSPq2eAxbfdw7q/twXRnsF5FlylMbzBvVJP+4jefz8z3PhGI6gAAABpmY1RMAAAADwAAABAAAAAQAAAAAAAAAAAAHgPoAABPJb/eAAABqGZkQVQAAAAQOI2Fks9LVFEUxz86ZguXbcVq0UDLCNpE9AeE4GagTQUGRotJySDBoXvP24wgLfqxKMQmaPcWbQJFRGfmnjP/gEaL9gqChNQfMC3uc2De8+mBC5dzv+f7Ped7D+Rjeecq3pqI7SF2kp19Gp0bBWwuRvDWJOn1ETtGbB3RBcReIvaJpe0r55d7+07S6+OtjnOjF6nlivV1VA53B7lG5xaiLUTXcOEhrj1WTuDak4jdG8olehuxN3hdRKyH2D6uPQlALa0g+qroi0vHWdyaKO1S9NsAJ/YHb8086AliX0s7nft8aXAXbSG2NwwQ+4LX+eKIZ5jqdR7RvzkCbeGtXgDX0goAy93rOJ2K2PACsX8g4T7SfRCVdBaxzdIRxLZx+jgTW0PsJ4h9RPRgoCT2Cxdmii3b82zmEZwbRewIb6vQ6Nwk6fVxOhu7CNWh7/HhEV53EfuNa1/L5n8Wa0L11JC3MdG9UzDP2yqJzlHfuAzE/YjrvpIHbsRV1qelHpwaKfoel44PP9TSCt7eRXY9yLyZPpfszHChircPiB0i9uMi+H9sHMtvoD6TpgAAABpmY1RMAAAAEQAAABAAAAAQAAAAAAAAAAAAHgPoAACjJAjOAAABpGZkQVQAAAASOI2Vkr1rFFEUxX/xIxFEQVshLETQf8BGC0n+Bz8g2mjMIhpRE41E4b07qYQQRbQIKKYTtkkTFoXAmLlnsRHBxjQKFkEL0VK02hQzWbIzG4yneu9y7jn3vPugjJDWiJrF9AHTL0yfCOmeCq8nTAlJq43pJ6ZFzKeI2cWdNr8qmm8z0RzYWdMmombz5ux0qX6VRAtEjRLCrk49+FnMY3FJax3nMsLqCNGniVrB9JHgg/m0fpOk1SakR+GODhB1jpDuY3xhL+bzTL7ZX42Y3cD0ldA8CPRh+o7pcckxO0+i95xp7O4Z1XyKmZUjxfkJ5p9LBD0n+mQ1ypb8nZrGMP0pC7wg6laF3Gui6Jcx/S2rXsD0rqdjbnCXkNZyAT3C9AUmmgNYdorQ6Cc0+jF/WTxUNxIfx7TOPT9UiK1jegrBB/M1+vWq49sTRL9G1DKmNe5rqBi/Xqzx+Gaeh3lh9WR3JL+EaZGoK12/0zSMaWYrtQ/TEkmrTfT6tmv8J0xzxa/8RtQzoteJGv0/wQc6hvk8pjVMvzH9ILw+vB19A/CHy5khQV06AAAAGmZjVEwAAAATAAAAEAAAABAAAAAAAAAAAAAeA+gAAE6y2ycAAAGoZmRBVAAAABQ4jZWTO2tUURDHfxt1Y2MjCKIYAgpB/ARiIX4IX0hsNK5IFhVjYbJwZjaVgg8kjeCrE7YQCw0WytU7/20FETQgdqKFaClarcW9LvuKrFOdGeb/mHPmwGCkbBrTMq43uH7ges/h1oahvpFhWqbZ7uD6jushHgtYPjse2PWIZruD6SL11cnxQEPK+cG++pk7m7C4iuWzpDTRrac4goeVSTbdVS7y7aSYKs5pAlMd10tcb1l6vatwGxdotjukbA9c1hZMR6mvTpKyjbjeYfnxYZdxHo81UrYZqOD6iutWf1PKj+Fq/+OeMkxzpYvbuD4ONtzF4tIQ8O/8STtYfLGzPJ/G9WuQ4B4eC0MEo/bA4hSu3wNKcRLT43VH6H1e001cn4qi5wdIrSqpVeVKvm0k2HUWj2dApcw/41qBFFPFDsR8H2BJu/GYx/NzmJ7i+kDj1d7Sfo1mu0NDMyV7XCtXeH+XoBH7cN3H4wGmOVKr2uPmEK7FXr0KFk+KhYra+J9nMCyul06+4FrBoobpxP8RNjSDxw081nD9xPWN9Hzreu1/AJWczMkfsOFuAAAAGmZjVEwAAAAVAAAAEAAAABAAAAAAAAAAAAAeA+gAAKN4qV0AAAGdZmRBVAAAABY4jZWSP2tUURDFfzEaQT+CfxBRIohVqhTiR7CQLYQIgroJoviv0jy4d14qQSUsBLXQgAjCViISCERe3Dn7AbaKqK1YiZVitxb3usF9m5AMXLjMnDlnZjgwHKE6RtQCph6mZ7X6tmEqKbt9TD8wX8Z0fjfNbyi7faLucHNl/5a4Yv0M0Z8CY5vJqIWk3DlXawjVYYJmCGFPFprOUz7KAD+aEn4bgAdrhzB/TWhP5PpxTB8w9Zj/eCQJ+ixlt0+oToB5C9MvGu1xQrUXU4/o92uTRL+FaSOvN4bpO6ZFMG8QdDmBOhcxdbe5U0XpzfT3FqYvw4AXmO7W75D3j51LRH+YcrqK6c8wwSui5msEjfZ4jWwkQelTlD615Qr/iy1i/nVH2NxwgUKTADSf78P0k6ilVLy3epDCT2+O+e5AuoffwDrXiXqP+SdCdWqwUtAMxfrJf+xz2RzTA4XoVzC9xHyZqGsDX4yM0J4g+ttkZZ8dHGrXEf1xduU3opaS47yJeSu5bidRaBLzJ5g2MP3O7zOms6PgfwEtyMus/wVV0wAAABpmY1RMAAAAFwAAABAAAAAQAAAAAAAAAAAAHgPoAABO7nq0AAABoGZkQVQAAAAYOI2Fkr1rVEEUxX9x/ULtF4UECwsLLexEESt7m0UsA2YjihKJhRsDM3cFsQgqiY1NVCyCW6RIEVAWX/bds/+AIBq0sFGrtGq3FvPUuO8luTDFzLlzzpkzF4YrZEcxPcB0roTtWFH3aPcHmDYI+cUS3urWiT5dfdm0RLs/IOoWzad7KntC70zRswyMVCjn5wFodGq0uvV/F3WEG6v7klB+tnA5V4A+lg58CoCZ3mFM74ne2uRuBtM6wceSoE/S7g8I2TEw3ce0QaNTI2S7Mb3D/Hb5iflNTB8KJyOYvmN6DOafMT1PzPllolQdEhD9LTEfL569gOkTRK0QdSmp+EvM75TDC7s2uXhVEExg+jlk06cwv1AiaHRqRV6nMV0FoO1NTL+2dLtjRT3C9KUaDNn+irND/+1b3TqzayerCcwfpsD8OpZfI+oNphfbW7rbG2V27VRSWzlAzMcxLWL+jKArTL8+uD2BaS6NqU9u2fPnN6rBzt6/JOZfMT1JE+dNzOcxfascsDJRdjwl7B8x/SjWOubzhOzEcPtvMOHHU2kn5uQAAAAASUVORK5CYII="
  64. },
  65. optionList: [
  66. {
  67. id: "Fade_st",
  68. text: "超时自动隐藏 / Hide after timeout",
  69. defaultValue: 1
  70. }, {
  71. id: "Dis_st",
  72. text: "显示于文字上方 / Display above selection",
  73. defaultValue: 1
  74. }, {
  75. id: "Tab_st",
  76. text: "新标签页打开 / Open in new tabs",
  77. defaultValue: 1
  78. }, {
  79. id: "Focus_st",
  80. text: "前台标签页打开 / Force foreground tabs",
  81. defaultValue: 1
  82. }, {
  83. id: "Iframe_st",
  84. text: "在Iframe中显示/ Load in iframes",
  85. defaultValue: 0
  86. }, {
  87. id: "Copy_st",
  88. text: "自动复制选中文字 / Auto copy selections",
  89. defaultValue: 0
  90. }, {
  91. id: "Ctrl_st",
  92. text: "仅按下Ctrl时显示 / Only when ctrl pressed",
  93. defaultValue: 0
  94. }, {
  95. id: "userEngine_st",
  96. text: "自定义引擎 / Enable Customize",
  97. defaultValue: 0
  98. }
  99. ],
  100. userEngines: [],
  101. defaultEngines: [
  102. {
  103. id: "UserEngine",
  104. title: "Example of User Engine",
  105. description: "自定义引擎示例 / Example of user engine",
  106. src: "http://lkytal.qiniudn.com/ic.ico",
  107. href: "https://www.google.com/search?newwindow=1&safe=off&q=${text}"
  108. }, {
  109. id: "UserEngine2",
  110. title: "Example Engine use dataURL",
  111. description: "DataURL引擎示例 / Example Engine use dataURL",
  112. src: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAA0SURBVDhPY/z//z8DKYAJShMNSNYAdRIjIyOEjwdAVNLNScgA7jysAUh7J41IDbROrQwMAOdoEhG0gLSFAAAAAElFTkSuQmCC",
  113. href: "https://www.google.com/search?q=${text}%20site:${domain}"
  114. }
  115. ]
  116. };
  117.  
  118. popData.engines = [
  119. {
  120. id: "Open_st",
  121. title: "Open As Url",
  122. description: "选中文本视作链接打开 / Open selection as url",
  123. defaultState: 0,
  124. src: popData.icons.linkIcon,
  125. href: '${rawText}'
  126. }, {
  127. id: "Site_st",
  128. title: "Search Current Website",
  129. description: "在当前网站内搜索 / Search in current website",
  130. defaultState: 1,
  131. src: popData.icons.inSiteIcon,
  132. href: 'https://www.google.com/search?newwindow=1&safe=off&q=${text}%20site:${domain}'
  133. }, {
  134. id: "Bing_st",
  135. title: "Search with Bing",
  136. description: "必应搜索 / Search with Bing",
  137. defaultState: 1,
  138. src: popData.icons.bingIcon,
  139. href: 'https://bing.com/search?q=${text}&form=MOZSBR'
  140. }, {
  141. id: "Baidu_st",
  142. title: "Search with Baidu",
  143. description: "百度搜索 / Search with Baidu",
  144. defaultState: 1,
  145. src: popData.icons.baiduIcon,
  146. href: 'https://www.baidu.com/s?wd=${text}&ie=utf-8'
  147. }, {
  148. id: "Google_st",
  149. title: "Search with Google",
  150. description: "谷歌搜索 / Search with Google",
  151. defaultState: 1,
  152. src: popData.icons.googleIcon,
  153. href: 'https://www.google.com/search?newwindow=1&safe=off&q=${text}'
  154. }, {
  155. id: "Yahoo_st",
  156. title: "Search with Yahoo",
  157. description: "雅虎搜索 / Search with Yahoo",
  158. defaultState: 0,
  159. src: popData.icons.yahooIcon,
  160. href: 'https://search.yahoo.com/search;?p=${text}&ei=UTF-8'
  161. }, {
  162. id: "Taobao_st",
  163. title: "Search with Taobao",
  164. description: "搜索淘宝 / Search with Taobao",
  165. defaultState: 1,
  166. src: popData.icons.taobaoIcon,
  167. href: 'https://s.taobao.com/search?q=${text}'
  168. }, {
  169. id: "Tieba_st",
  170. title: "Search in Tieba",
  171. description: "搜索贴吧 / Search with Tieba",
  172. defaultState: 0,
  173. src: popData.icons.tiebaIcon,
  174. href: 'http://tieba.baidu.com/f/search/res?ie=utf-8&qw=${text}'
  175. }, {
  176. id: "youtube_st",
  177. title: "Search with Youtube",
  178. description: "搜索Youtube / Search with Youtube",
  179. defaultState: 1,
  180. src: popData.icons.youtubeIcon,
  181. href: 'https://www.youtube.com/results?search_query=${text}'
  182. }, {
  183. id: "youku_st",
  184. title: "Search with Youku",
  185. description: "搜索优酷 / Search with Youku",
  186. defaultState: 0,
  187. src: popData.icons.youkuIcon,
  188. href: 'http://www.soku.com/search_video/q_${text}'
  189. }, {
  190. id: "amazon_st",
  191. title: "Search with Amazon",
  192. description: "搜索亚马逊/ Search with Amazon",
  193. defaultState: 1,
  194. src: popData.icons.amazonIcon,
  195. href: 'https://www.amazon.com/s/field-keywords=${text}'
  196. }, {
  197. id: "eBay_st",
  198. title: "Search with eBay",
  199. description: "搜索eBay / Search with eBay",
  200. defaultState: 0,
  201. src: popData.icons.eBayIcon,
  202. href: 'http://www.ebay.com/sch/i.html?_nkw=${text}&_sacat=0'
  203. }, {
  204. id: "douban_st",
  205. title: "Search with Douban",
  206. description: "搜索豆瓣电影 / Search with Douban Movie",
  207. defaultState: 0,
  208. src: popData.icons.doubanIcon,
  209. href: 'https://movie.douban.com/subject_search?search_text=${text}'
  210. }, {
  211. id: "jd_st",
  212. title: "Search with JD",
  213. description: "搜索京东 / Search with JD",
  214. defaultState: 0,
  215. src: popData.icons.jdIcon,
  216. href: 'https://search.jd.com/Search?keyword=${text}&enc=utf-8'
  217. }, {
  218. id: "Wiki_st",
  219. title: "Search with Wiki",
  220. description: "搜索维基百科 / Search with Wikipedia",
  221. defaultState: 0,
  222. src: popData.icons.wikiIcon,
  223. href: 'https://wikipedia.org/wiki/${text}'
  224. }
  225. ];
  226.  
  227. log = function(msg) {
  228. popData.count += 1;
  229. return console.log("Popup Msg " + popData.count + " : " + msg);
  230. };
  231.  
  232. isChrome = function() {
  233. return navigator.userAgent.indexOf("Chrome") > -1;
  234. };
  235.  
  236. fixPos = function(sel, e) {
  237. var eventLeft, eventTop, fix, m_left, offsetLeft, offsetTop, offsets;
  238. offsets = get_selection_offsets(sel);
  239. offsetTop = offsets[0];
  240. offsetLeft = offsets[1];
  241. if (e != null) {
  242. eventTop = e.pageY;
  243. eventLeft = e.pageX;
  244. if (Math.abs(offsetTop - eventTop) > 50) {
  245. offsetTop = eventTop - 8;
  246. }
  247. if (Math.abs(offsetLeft - eventLeft) > 50) {
  248. offsetLeft = eventLeft + 10;
  249. }
  250. } else {
  251. $('#showUpBody').css('margin-left', '60px');
  252. }
  253. if (GetOpt('Dis_st')) {
  254. offsetTop = offsetTop - 2 - $('#ShowUpBox').height();
  255. if ((offsetTop - document.documentElement.scrollTop) < 40) {
  256. offsetTop = document.documentElement.scrollTop + 40;
  257. }
  258. } else {
  259. offsetTop += 1.1 * offsets[2];
  260. }
  261. m_left = $('#ShowUpBox').width();
  262. fix = 0;
  263. if (offsetLeft - m_left < 4) {
  264. fix = 4 - offsetLeft + m_left;
  265. }
  266. $('#ShowUpBox').css("top", offsetTop + "px").css("left", (offsetLeft - m_left + fix) + "px");
  267. return $('#popupTip').css('margin-left', m_left - 20 - fix);
  268. };
  269.  
  270. TimeOutHide = function() {
  271. if (popData.mouseIn === 0 && GetOpt("Fade_st") && !popData.bTrans) {
  272. return $('#ShowUpBox').fadeOut(600);
  273. }
  274. };
  275.  
  276. OnEngine = function(e) {
  277. if (isChrome()) {
  278. GM_openInTab($(this).attr('href'), {
  279. active: GetOpt("Focus_st") === 1
  280. });
  281. } else {
  282. GM_openInTab($(this).attr('href'), !GetOpt("Focus_st"));
  283. }
  284. $('#ShowUpBox').fadeOut(200);
  285. return false;
  286. };
  287.  
  288. PopupInit = function() {
  289. var $DivBox, $icon, EngineList, engine, j, k, l, len, len1, len2, ref, ref1, ref2;
  290. $('#ShowUpBox').remove();
  291. EngineList = "<a id='transBtn'><img title='Translate' src='" + popData.icons.translateIcon + "' /></a>";
  292. ref = popData.engines;
  293. for (j = 0, len = ref.length; j < len; j++) {
  294. engine = ref[j];
  295. EngineList += "<a id='" + engine.id + "Icon' class='engine' href=''><img title='" + engine.title + "' src='" + engine.src + "' /></a>";
  296. }
  297. if (GetOpt("userEngine_st")) {
  298. ref1 = popData.userEngines;
  299. for (k = 0, len1 = ref1.length; k < len1; k++) {
  300. engine = ref1[k];
  301. EngineList += "<a id='" + engine.id + "Icon' class='userEngine' href=''><img title='" + engine.title + "' src='" + engine.src + "' /></a>";
  302. }
  303. }
  304. $('body').append("<span id=\"ShowUpBox\"> <span id=\"showUpBody\"> <span id=\"popupWrapper\"> " + EngineList + " </span> <span id=\"transPanel\" /> </span> </span>");
  305. $DivBox = $('#ShowUpBox');
  306. $DivBox.hide();
  307. $DivBox.hover(function() {
  308. $(this).fadeTo(150, 1);
  309. return popData.mouseIn = 1;
  310. }, function() {
  311. if (popData.bTrans === 0 && $(this).is(":visible") && $(this).attr("opacity") === 1) {
  312. $(this).fadeTo(300, 0.7);
  313. clearTimeout(popData.timer);
  314. popData.timer = setTimeout(TimeOutHide, 6000);
  315. }
  316. return popData.mouseIn = 0;
  317. });
  318. $('#showUpBody').on("mouseup", function(event) {
  319. if (event.which === 3) {
  320. CopyText();
  321. $('#ShowUpBox').fadeOut(200);
  322. return false;
  323. } else if (event.which === 2) {
  324. GM_openInTab(document.defaultView.getSelection().toString());
  325. return false;
  326. }
  327. });
  328. $('#showUpBody').on("contextmenu", function(event) {
  329. return false;
  330. });
  331. $('#transPanel').on("mouseup contextmenu", function(event) {
  332. return event.stopPropagation();
  333. });
  334. $DivBox.on("click dblclick mousedown mouseup contextmenu", function(event) {
  335. return event.stopPropagation();
  336. });
  337. ref2 = popData.engines;
  338. for (l = 0, len2 = ref2.length; l < len2; l++) {
  339. engine = ref2[l];
  340. $icon = $("#" + engine.id + "Icon");
  341. if (!GetOpt(engine.id)) {
  342. $icon.hide();
  343. }
  344. }
  345. $('#ShowUpBox').find('.engine, .userEngine').on('click', OnEngine);
  346. $('#transBtn').on("click", onTranslate);
  347. if (GetOpt('Tab_st')) {
  348. $DivBox.find('a').attr('target', '_blank');
  349. } else {
  350. $DivBox.find('a').attr('target', '_self');
  351. }
  352. if (GetOpt('Dis_st')) {
  353. popData.tip = popData.tipUp;
  354. return $DivBox.append('<span id="popupTip" class="tipUp"></span>');
  355. } else {
  356. popData.tip = popData.tipDown;
  357. return $DivBox.prepend('<span id="popupTip" class="tipDown"></span>');
  358. }
  359. };
  360.  
  361. ajaxError = function(res) {
  362. return $('#transPanel').empty().append("<p>Translate Error:<br /> " + res.statusText + " </p>").show();
  363. };
  364.  
  365. onTranslate = function(event) {
  366. event.preventDefault();
  367. popData.bTrans = 1;
  368. $("#transPanel").empty().append("<div style='padding:10px;'><img src='" + popData.icons.pending + "' /></div>").show();
  369. $('#popupWrapper').hide();
  370. fixPos(document.defaultView.getSelection());
  371. return doRequest(0, 1500);
  372. };
  373.  
  374. doRequest = function(i, wait) {
  375. var ErrHandle;
  376. ErrHandle = function() {
  377. return doRequest(i + 1, wait + 2000);
  378. };
  379. if (i >= 2) {
  380. ErrHandle = ajaxError;
  381. }
  382. return GM_xmlhttpRequest({
  383. method: 'POST',
  384. url: 'https://translate.google.cn/translate_a/single',
  385. data: "client=gtx&dj=1&q=" + popData.text + "&sl=auto&tl=auto&ie=UTF-8&oe=UTF-8&source=icon&dt=t&dt=bd",
  386. headers: {
  387. 'Content-Type': 'application/x-www-form-urlencoded'
  388. },
  389. timeout: wait,
  390. onload: parseTranslationGoogle,
  391. onerror: ErrHandle,
  392. ontimeout: ErrHandle
  393. });
  394. };
  395.  
  396. parseTranslationGoogle = function(responseDetails) {
  397. var PickMeaning, RLine, RTxt, Result, line, sentence;
  398. if (!popData.bTrans) {
  399. return;
  400. }
  401. try {
  402. RTxt = JSON.parse(responseDetails.responseText);
  403. } catch (error) {
  404. return ajaxError(responseDetails);
  405. }
  406. RLine = (function() {
  407. var j, len, ref, results;
  408. ref = RTxt.sentences;
  409. results = [];
  410. for (j = 0, len = ref.length; j < len; j++) {
  411. sentence = ref[j];
  412. results.push(sentence.trans);
  413. }
  414. return results;
  415. })();
  416. PickMeaning = function(list) {
  417. var i, item, j, len, results;
  418. results = [];
  419. for (i = j = 0, len = list.length; j < len; i = ++j) {
  420. item = list[i];
  421. if (item.score > 0.005 || i < 3) {
  422. results.push(item.word);
  423. }
  424. }
  425. return results;
  426. };
  427. if (RTxt.dict != null) {
  428. RLine += (function() {
  429. var j, len, ref, results;
  430. ref = RTxt.dict;
  431. results = [];
  432. for (j = 0, len = ref.length; j < len; j++) {
  433. line = ref[j];
  434. results.push("<br>" + (line.pos + " : " + (PickMeaning(line.entry))));
  435. }
  436. return results;
  437. })();
  438. }
  439. Result = "<div id=\"tranRst\" style=\"font-size:13px;overflow:auto;padding:5px 12px;\"> <div style=\"line-height:200%;font-size:13px;\"> " + RLine + " </div> </div>";
  440. $('#transPanel').empty().append(Result).show();
  441. fixPos(document.defaultView.getSelection());
  442. };
  443.  
  444. $(document).on("mousedown", function(event) {
  445. popData.mousedownEvent = event;
  446. if (popData.bTrans === 1) {
  447. PopupInit();
  448. }
  449. return $('#ShowUpBox').hide();
  450. });
  451.  
  452. $(document).on("mouseup", function(event) {
  453. if (event.which !== 1) {
  454. return;
  455. }
  456. if (GetOpt('Ctrl_st') && !event.ctrlKey) {
  457. return;
  458. }
  459. return ShowBar(event);
  460. });
  461.  
  462. eventFromTextbox = function(eventList) {
  463. var event, j, len;
  464. for (j = 0, len = eventList.length; j < len; j++) {
  465. event = eventList[j];
  466. if (event != null) {
  467. if ($(event.target).is('textarea, input, *[contenteditable="true"]')) {
  468. return true;
  469. }
  470. }
  471. }
  472. return false;
  473. };
  474.  
  475. InTextBox = function(selection) {
  476. var area, j, len, ref;
  477. if (isChrome()) {
  478. return false;
  479. }
  480. ref = $('textarea, input, *[contenteditable="true"]', document);
  481. for (j = 0, len = ref.length; j < len; j++) {
  482. area = ref[j];
  483. if (selection.containsNode(area, true)) {
  484. return true;
  485. }
  486. }
  487. return false;
  488. };
  489.  
  490. ShowBar = function(event) {
  491. var engine, j, k, len, len1, paraList, ref, ref1, sel, setHref;
  492. sel = document.defaultView.getSelection();
  493. if (InTextBox(sel) || eventFromTextbox([event, popData.mousedownEvent])) {
  494. return;
  495. }
  496. popData.rawText = sel.toString();
  497. popData.text = encodeURIComponent(popData.rawText);
  498. if (popData.rawText === '') {
  499. return;
  500. }
  501. if (GetOpt("Copy_st")) {
  502. CopyText(popData.rawText);
  503. }
  504. $('#transPanel').empty().hide();
  505. paraList = {
  506. "\\${rawText}": popData.rawText,
  507. "\\${text}": popData.text,
  508. "\\${domain}": document.domain,
  509. "\\${url}": location.href
  510. };
  511. setHref = function(engine) {
  512. var $engine, href, para, value;
  513. href = engine.href;
  514. for (para in paraList) {
  515. if (!hasProp.call(paraList, para)) continue;
  516. value = paraList[para];
  517. href = href.replace(RegExp("" + para, "g"), value);
  518. }
  519. $engine = $("#" + engine.id + "Icon");
  520. return $engine.attr("href", href);
  521. };
  522. ref = popData.engines;
  523. for (j = 0, len = ref.length; j < len; j++) {
  524. engine = ref[j];
  525. setHref(engine);
  526. }
  527. ref1 = popData.userEngines;
  528. for (k = 0, len1 = ref1.length; k < len1; k++) {
  529. engine = ref1[k];
  530. setHref(engine);
  531. }
  532. if (needPrefix(popData.rawText)) {
  533. $('#Open_stIcon').attr('href', "http://" + popData.rawText);
  534. }
  535. popData.mouseIn = 0;
  536. popData.bTrans = 0;
  537. clearTimeout(popData.timer);
  538. popData.timer = setTimeout(TimeOutHide, 6000);
  539. fixPos(sel, event);
  540. return $('#ShowUpBox').css('opacity', 0.9).fadeIn(150);
  541. };
  542.  
  543. needPrefix = function(url) {
  544. var j, len, prefix, urlPrefixes;
  545. urlPrefixes = ['http://', 'https://', 'ftp://', 'file://', 'thunder://', 'ed2k://'];
  546. for (j = 0, len = urlPrefixes.length; j < len; j++) {
  547. prefix = urlPrefixes[j];
  548. if (url.indexOf(prefix) === 0) {
  549. return 0;
  550. }
  551. }
  552. return 1;
  553. };
  554.  
  555. CopyText = function(selText) {
  556. if (selText == null) {
  557. selText = document.defaultView.getSelection().toString();
  558. }
  559. try {
  560. return GM_setClipboard(selText, "text");
  561. } catch (error) {
  562. alert("ERROR: Auto copy not supported and will be disabled now");
  563. return SaveOpt("Copy_st", 0);
  564. }
  565. };
  566.  
  567. GetOpt = function(id) {
  568. return GM_getValue(id);
  569. };
  570.  
  571. SaveOpt = function(id) {
  572. return GM_setValue(id, $("#" + id + " > input").prop("checked") + 0);
  573. };
  574.  
  575. ReadOpt = function(id) {
  576. return $("#" + id + " > input").prop("checked", GM_getValue(id));
  577. };
  578.  
  579. OpenSet = function() {
  580. if ($('#popup_setting_bg').length === 0) {
  581. SettingWin();
  582. }
  583. return $('#popup_setting_bg').fadeIn(400);
  584. };
  585.  
  586. SettingWin = function() {
  587. var chsJSON, engJSON, engine, engineOptionList, generateEngineOption, generateOption, item, j, len, option, optionList, ref;
  588. addAdditionalCSS();
  589. $('#popup_setting_bg').remove();
  590. generateOption = function(option) {
  591. 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>";
  592. };
  593. optionList = ((function() {
  594. var j, len, ref, results;
  595. ref = popData.optionList;
  596. results = [];
  597. for (j = 0, len = ref.length; j < len; j++) {
  598. option = ref[j];
  599. results.push(generateOption(option));
  600. }
  601. return results;
  602. })()).join(' ');
  603. generateEngineOption = function(engine) {
  604. 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>";
  605. };
  606. engineOptionList = ((function() {
  607. var j, len, ref, results;
  608. ref = popData.engines;
  609. results = [];
  610. for (j = 0, len = ref.length; j < len; j++) {
  611. engine = ref[j];
  612. results.push(generateEngineOption(engine));
  613. }
  614. return results;
  615. })()).join(' ');
  616. 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]';
  617. 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]';
  618. $("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 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'>中文</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 entry, should be the url to an image or 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 bellow: <ul> <li>${text} : will be replaced by selected text (Url encoded, should use this in default)</li> <li>${rawText} : will be replaced by untouched selected text</li> <li>${domain} : will be replaced by current url\'s domain</li> <li>${url} : will be replaced by current webpage\'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'> 自定义引擎内容应当是合法的JSON格式, 如下 <pre> " + chsJSON + " </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> 注意: 内置引擎无法直接修改, 你可以禁用它们然后添加你自定义的引擎 </div> </div> <div id='help_btnArea'> <div id='popup_help_close' class='setting_btn'>Close</div> </div> </div> </div> </div> </div>");
  619. $("#popup_setting_bg, #popup_help_bg").hide();
  620. $("#tabs_box > .popup_tab").on("click", function(e) {
  621. $("#tabs_box > .popup_tab").removeClass("popup_selected");
  622. $(this).addClass("popup_selected");
  623. $("#option_box > div").hide();
  624. return $("#" + $(this).attr("id") + "Page").show();
  625. });
  626. $("#option_box > div").hide();
  627. $("#tabs_box > .popup_tab.popup_selected").click();
  628. $("#chsContent").hide();
  629. $("#engHead").on('click', function(event) {
  630. $("#engHead").addClass("popup_head_selected");
  631. $("#chsHead").removeClass("popup_head_selected");
  632. $("#engContent").show();
  633. return $("#chsContent").hide();
  634. });
  635. $("#chsHead").on('click', function(event) {
  636. $("#engHead").removeClass("popup_head_selected");
  637. $("#chsHead").addClass("popup_head_selected");
  638. $("#engContent").hide();
  639. return $("#chsContent").show();
  640. });
  641. ref = $("#popup_setting_win .setting_item");
  642. for (j = 0, len = ref.length; j < len; j++) {
  643. item = ref[j];
  644. if (item != null) {
  645. ReadOpt(item.id);
  646. }
  647. }
  648. $("#popup_engines").val(GM_getValue("engineString", popData.defaultEngineString));
  649. $("#popReset").click(function() {
  650. if (confirm("Reset?")) {
  651. return $("#popup_engines").val(popData.defaultEngineString);
  652. }
  653. });
  654. $("#popHelp").click(function() {
  655. return $("#popup_help_bg").fadeIn();
  656. });
  657. if (!GetOpt("userEngine_st")) {
  658. $("#popup_tab3").hide();
  659. }
  660. $("#popup_save").click(function() {
  661. var k, len1, ref1, userEngineString;
  662. ref1 = $("#popup_setting_win .setting_item");
  663. for (k = 0, len1 = ref1.length; k < len1; k++) {
  664. item = ref1[k];
  665. if (item != null) {
  666. SaveOpt(item.id);
  667. }
  668. }
  669. userEngineString = $("#popup_engines").val();
  670. if (userEngineString !== "") {
  671. try {
  672. popData.userEngines = JSON.parse(userEngineString);
  673. GM_setValue("engineString", userEngineString);
  674. } catch (error) {
  675. alert("搜索列表错误!请检查\nEngine config Error!");
  676. log(userEngineString);
  677. }
  678. }
  679. return $("#popup_setting_bg").fadeOut(300, function() {
  680. $("#popup_setting_bg").remove();
  681. return PopupInit();
  682. });
  683. });
  684. $("#popup_close, #popup_setting_bg").click(function() {
  685. return $("#popup_setting_bg").fadeOut(300, function() {
  686. return $("#popup_setting_bg").remove();
  687. });
  688. });
  689. $("#popup_help_bg, #popup_help_close").on("click", function(e) {
  690. return $("#popup_help_bg").fadeOut();
  691. });
  692. return $('#popup_setting_win, #popup_help_win, #popup_help_bg').click(function(e) {
  693. return e.stopPropagation();
  694. });
  695. };
  696.  
  697. UpdateLog = function() {
  698. addAdditionalCSS();
  699. $("body").append("<div id='popup_update_bg'> <div id='popup_update_win'> <div id='update_header'> Popup Search Updated (ver 4.1.0) </div> <div id='popup_update_content'> <div id='update_texts'> <p> <h3>此版本引入的重要改变:</h3> <p> 自定义引擎功能开放, 点击 'Open setting' 可以打开设置并启用该功能. 在自定义前请点击 'Help' 按钮以阅读帮助文档. </p> <p> 注意: 启用自定义引擎后, 重新打开设置窗口才会生效. </p> </p> <p> <h3>What's new in this version:</h3> <p> You can customize your own engines now. Click 'Open setting' to check it out. Remember to read 'HELP' before edit. </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>");
  700. $('#popup_update_open').on('click', function(event) {
  701. UpdateNotified();
  702. $("#popup_update_bg").hide();
  703. OpenSet();
  704. });
  705. return $('#popup_update_close').on('click', function(event) {
  706. UpdateNotified();
  707. $("#popup_update_bg").hide();
  708. });
  709. };
  710.  
  711. UpdateNotified = function() {
  712. return GM_setValue("UpdateAlert", popData.codeVersion);
  713. };
  714.  
  715. PopupLoad = function() {
  716. var engine, j, k, len, len1, option, popupMenu, ref, ref1, setDefault, userEngineString;
  717. if (window.self !== window.top || window.frameElement) {
  718. if (!GM_getValue("Iframe_st", 0)) {
  719. return;
  720. }
  721. }
  722. addCSS();
  723. if (GM_getValue("UpdateAlert", 0) < popData.codeVersion) {
  724. setDefault = function(key, defaultValue) {
  725. return GM_setValue(key, GM_getValue(key, defaultValue));
  726. };
  727. ref = popData.optionList;
  728. for (j = 0, len = ref.length; j < len; j++) {
  729. option = ref[j];
  730. setDefault(option.id, option.defaultValue);
  731. }
  732. ref1 = popData.engines;
  733. for (k = 0, len1 = ref1.length; k < len1; k++) {
  734. engine = ref1[k];
  735. setDefault(engine.id, engine.defaultState);
  736. }
  737. UpdateLog();
  738. }
  739. popData.defaultEngineString = JSON.stringify(popData.defaultEngines, null, 4);
  740. if (GetOpt("userEngine_st")) {
  741. userEngineString = GM_getValue("engineString", popData.defaultEngineString);
  742. try {
  743. popData.userEngines = JSON.parse(userEngineString);
  744. } catch (error) {
  745. log(userEngineString);
  746. }
  747. }
  748. PopupInit();
  749. GM_registerMenuCommand("Popup Search Setting / 设置", OpenSet, 'p');
  750. if (GM_getValue("PopupMenu", 0)) {
  751. popupMenu = document.body.appendChild(document.createElement("menu"));
  752. popupMenu.outerHTML = '<menu id="userscript-popup" type="context"><menuitem id="PopupSet" label="Popup Search设置"></menuitem></menu>';
  753. document.querySelector("#PopupSet").addEventListener("click", OpenSet, false);
  754. return $(document).on("contextmenu", function() {
  755. return document.body.setAttribute("contextmenu", "userscript-popup");
  756. });
  757. }
  758. };
  759.  
  760. setTimeout(PopupLoad, 100);
  761.  
  762. addCSS = function() {
  763. 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; }");
  764. };
  765.  
  766. addAdditionalCSS = function() {
  767. if (popData.additionalCSSLoaded === 1) {
  768. return;
  769. }
  770. popData.additionalCSSLoaded = 1;
  771. 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; }");
  772. };
  773.  
  774. getLastRange = function(selection) {
  775. var j, rangeNum, ref;
  776. for (rangeNum = j = ref = selection.rangeCount - 1; ref <= 0 ? j <= 0 : j >= 0; rangeNum = ref <= 0 ? ++j : --j) {
  777. if (!selection.getRangeAt(rangeNum).collapsed) {
  778. return selection.getRangeAt(rangeNum);
  779. }
  780. }
  781. return selection.getRangeAt(selection.rangeCount - 1);
  782. };
  783.  
  784. get_selection_offsets = function(selection) {
  785. var $test_span, Rect, lastRange, newRange;
  786. $test_span = $('<span style="display:inline;">x</span>');
  787. lastRange = getLastRange(selection);
  788. newRange = document.createRange();
  789. newRange.setStart(lastRange.endContainer, lastRange.endOffset);
  790. newRange.insertNode($test_span[0]);
  791. Rect = $test_span[0].getBoundingClientRect();
  792. $test_span.remove();
  793. return [Rect.top + window.scrollY, Rect.left + window.scrollX, 0, 0];
  794. };