');\n\n\t\t\t\t\t\t$(this).addClass('xkit-accesskit-viscaps');\n\n\t\t\t\t\t}\n\n\t\t\t\t});\n\n\t\t\t\t$(this).addClass('xkit-accesskit-viscaps');\n\n\t\t\t}\n\n\t\t});\n\n\t},\n\n\tdisable_xkit_counter: function() {\n\n\t\tXKit.tools.remove_css(\"xkit_tweaks_slim_sidebar\");\n\t\tXKit.tools.remove_css(\"xkit_tweaks_hide_section_headers\");\n\n\t},\n\n\tdestroy: function() {\n\t\tthis.running = false;\n\t\tXKit.tools.remove_css(\"accesskit\");\n\t}\n\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAEaJJREFUeAGtW1mIZVcVPfcNVdVDkk4nxnQUEnEIooLEGMc2UfzWD0dERUxUBP3S1qgoYkQ/HH6MBkQlon4oiKL4pxKI4tSiEpwT59Cx010d01NVvcm19t7r3HPPfVXVjZ6k7t73nL3XXnuf4d73qrpJ0dbfvjicJtMjadDcuJjPD7G7aZq0WCxMmhl03CR0upd0ygtpu/grFiVbL34Vo2/v1Fo65EWs4Nc0x6AdXQyHnzh4V3Mv4Wxk/a2TD6R5umORFmHJIQ6iAPiPclnTGKU1xYpbc1MfDaRvM17H2x0fvFTUpQSss3dBYefg8sGDXxh/rFm/bXIYqd6Dag76DHu+F9dRr5C6AL2KVPA9fwCoj6bSKdlUjFhB3rn8akVIo1tG4HBkkeZIno1AYkm1DrjzMEY7zdYPIQwz4GAhfs6fW8zd6nDZMBzMfl7Yh76AZKvHd8qHE94MpkdG85RuxPL31gCIWJQU+LF9ZnfQYedBogMG7DNDE90t477oU8awKdSsq8+2AG605ZZuAYZ2etQ6uriY5FiVD7tyUKrzdOMozRd24NmgkomC2InAmsQMVf7JCsexbE9j2jtDS5xFigx3O9TmYEQbSjbplGyO2kqPVQyIi5u3hnI0lPKyOMQt0G3FPXkTSzPUNWzHFC9jBYbNpGG4Rb0i6kOvb88YXEEe2VYf8XLAilHYiQdvjX+YSS/dRz47ZVcJ6ouwLWUFUd1agmCnGW/DC59bhC3uzR+XuO35Cysytr3Ovtjz5mjVcQCa2aQFngWjHoXxpxU5qFJNGuXoRqy+CEmS463eIyRyQdjRWvvMLqaUu519Js2YxStiSBdfsy/Gw8cELrvzERfJlEZ0ynsM0am3MyholxqTvc8AxxxQWEaEvYEleyZHS0+y1UWntwIIXbQ+Xpcv6+4cwkmFC1njEw8rYKdmdGHgFL0wOxQIdhaksPc9LCby3R7PYzinfsIqastZxbSe6tT2tYWYecmz+OLiGLYFNGM8XUxnKdEsGfaFU00IA2SUp1SBJA2jCO7Tj16Hr90zVIQPLj6rjkVS9j9vA67dQIorSZtSrwMwVzwFChMeLiQXh4zlZluEUGgxXObU0esMbZCAcOQ1sHLB2deZERUzKmROvKgRp8VTr2Q1H8jXJ4/SmsVSDGeFp0CeEKeLe6cLFykhWSoPrwHCLtOX9RmFtHp4kNZeOEjzRxfp3Lfmafqg72NDAhmRduv+tZiuHFnRjBtuIl0rrvfJwqJkUI7Ze4CGa9k1dz/ZZJSLUFaf3aRL39oeO+PrB2n9XZO02GxRuyviIsBhKhRJepd6jcaxAS24CrQSJMtqatwAC0T2q082O8mVG+Ijh7ul4eVNGl6r+SIHB6Q03XjxAgfTWxmmxjvgst5yII7jbofXTgex7QyIg5Co3EPRx9udgnK8blZEdCrF2XFm0jZiz044SeslWSphVh3qefcLj/62ZciRreLrb5qML4+uTpeBJaWS0dA66ECdJiGp7/oDA7OhjMRCEvbs92Zp6/f+nr+YLdKZr82sABlXsShL3TAJSVyXpsNGcrm9czY38zNaliL7qDTHXrOBQjMgsdFBUEZZ1thN0xjWgaVTthrOpo4egKsJSx8Pmg38nEa8WRtPscWnplDzu1j7Go/+nUPQE0KO8dhgdZWkOyMVK10ULHSfBbcoS8dyqqwaPfCOcVp7tp8Fpz45SZu/wIoo4tkyNlz36F5VrIhvM6E+Wno8l54HobbLh1ztDOgkUGYAwHaJMfduQcjb+0SzS4DJt6SgGnYnQPQV/jbsCfb8ZbaNFBfn7PE6IcnXzjQHoF28B3hAA8hJk7pvBko2W5osAv5j69u3lH2c1aedmeeZ8Dv1q8jqrWU4o5tReefRW10WtiUKfkSSLfU+X2wBOZkx2JpRsSS7W0ChJEmir+c+Sx7jwYLYnYbbTh/taCLW0uW2y7jiSnZiEXZJfqM5HyVhKTJZsh+kt4tvjiJptriIpO5LWemjx8F4gvMgCGz+FufBFkL6g8KhgC9+c5tdvqk7I/arj9B5ucUEknvuK2xLf/9GSBEMpb2oW7LC89miufPxWO2Z1gKFFrxz/96XDtPosUJP6fg7t9L0WDEhsORowGe99WiLQ1B/L3DJe9ZBfbzPq6sAjEPQhi/oUiYhciJkBWIcBViCuMOQ+8Eg2wBoYVl4j3STS7DZVcaWLrlsvLsCGEdZ0XqXJqKS9LVguSIA2AFv42d4EXq4DTJ/BEgZjL4EDEkz6aUN+9UUK+JzK2vf08TOO4DoECc3XwHxKmnGPBNiD+0GwNNBoMZBxCQZoaiIweaxlLjnN38BlDxFdQaRWfaBovdjG9rNnoc6DWkXgv5xy+1hj0GrLMZFRJKWri8HyEhCtCjdS7OGDzxX4ucgDqyz8BgHVpjZc1kuHCLhrolG2zEVpLZntsWW0ey3E+rQud4w73wn2EYqtZaNn7j83j4YQJQTotgN1tXelwzTnhcM0urTB6nBw5bt9NdnaTEJX4Vo4dGDMbsvbBgjbnsrNFaritgbN0dNYuAAv8SzLSAunG1VTX2l1HLXHrItgApQWoO+dlOTDtw6TqOrPfDkT4u09cA8zdcXaRMfhPZfNywhL0BnRYqC7OQhM8llttWYfxZoSxKvijEt7Ne0EkxcYth4qQ/Dl7x+mC59NSAxy6e/PU2nvzVN81MFC9juf9nFFqBlbDMNjJ1mvD+BrT+ZlHeccKyANgMCW76QbNIp2WoCdFXfZbeO0iUvH6XJg/N08qMT+6qrxQ6ATngU7BUjbJWSkscprwu8GK3jQ1N2LcztJQ7QlGzkqT7HYFyOKb73tlc7BAtEmpe32uAm6YZB9YUtofdgvzP5rb/N0/Hbt9LiDG3Rql9O1jRWntL9hsid+tfT35mmrT8wNjHxExx9gjxxetmCDcn7bCgH7+xc7SsxGydo9WNPAPRR+o90yrDfl9Llt43SDJ/tT3wE3+8p+U6Y/+1mz00XuG3IiU3cLkB2X4Tcvb0SoKh41jWVGL/0laM02N+kU5/Hsv833ws8PkFMh002h3L6m9N07oczDu/YxtfiC9TXjc2G3x88cncc0HHyc2Aer92UbL4FXHpPdV2Sz4h9+j2Ab3oydsq9BCJ4eQjtw/Kf4Q3uDL7uUqKSvSWJvDd+x4gWNRdL9oNLUrr6s6tp6y+LdPLjW2k/zojBapNWrhuk4WPxVToKbOV0dzIXlKs8C8Bd/Op8anvmjS0QoKRDAEnoNhTSdIxJ0m78JHy9dbBJ53+K5/uW2zM4bUpfwyU24fFdoP09AWbNPvWFpM5CTv4xT2vPApdVPDZ/HVMLtz14vBomLtviizslfxhPkro5SrKjYQHCsDQOADsDoOsMIID1BYPxE3xvbtxHoksCln2BQ7sWj5wQ2MgBAmMbv/E/kli5dpjO47OC2t7nxDkA28EB9VbSckBf4Am7jeexPWfnG38fUAEVt0g532mHu8TsX+FDsxMuGaj7HEYQ86f01qLhvhqm/+yk2w3w6nz+Z/hjrsBcfcYgXfHeEd4sh9gWKf3zVfhW1RJtEe2pgNvYwRhHAIvh8T0XFKHIKZ5DNLiQHwYzREgk62dUmuM3O77vAM6lHlge1t8bTSc5jDpxiJh9StMxOsdWYmtWmjQ9ibfIP8c9Xqf33TxKoyuwbHHojq8jkkdQPMW2bWg8ECOkgfYuwLJ9aEQiCZKB07IfVtQAbds0abbuiPwND0l4MJfmL6xI0MMwWSYPl0KajrjDWN7Tk5h97KxzP2m3gfjPz+AF5irsXiYXnDx2lbAFYRwPpFwppftnASZkzQExHPdd4bNEPB+fPOSHFGfj3I9jg2Aso8GMunhI326c0cZP8EU5fci3Ew/YS/GSxXNm475Z2rwPq+IvzMC5iYvdWR4YiHxQasTHhMgYRuIie4tGEAFJuoFdPVgELLDSxq8wS1iye5+PA4pxaROy1M2H/YQLSZ02WVJB42E3xa/LJn8FJ8zw1v0L2+/rn8Mb5ibGnz9Ie58H2lZNOBiAS+NOTACXerZhgIhjKuz8TZB3aLYsQpa6DZpBaBF0gXPo/C/nafXJ/rE3222jlJi+BCNm4PGdYngAq+lH3WW/9+ZhetyX1tJlr8EhiMPwyiMr6dCdq/ieoZOPTwBiW2EjUeq5SY947MfvBnFXdJQVynqMGxjN888infoqXn/RcTl+7c2V59WXDWdCfQRx3RRcdFpTDvakdOBN+LNFrKhHvj7NfkN8c3zlkXF65CuT9OAbN9ND795M/3rDRlpsLKwQ9nEj+NiigE5Z6iXfDh/Y2gqQAaNSj+hZb8d9KBcMGfNDytkfzNLaU4fp4NvwWLAqEIM/oJFlqft4uQqufM9KGl89SI9+Y5rst8jht//FQ3sz/A+/TIm+2X9SOvGpSdpzA1bMY4SLUDbustRbvuIV8WFvL0I5QR4YBIka2uqwvthT9HMDGmX94U9v2cF0GV5dL3+Lf7xwzO4K8NXhWBkHL+OPed847Ts8TOeOztKpL3P2Ix64jA41OA/80DMf9FFu/RPnD94qh9cYlQ4f+deSE+IYLJrnaocgbn3J4NChbo8wPmKYfEjTLXkHIZCdsOzbaNJD70cR/j5PB147Toc+uZJWnshRotFTeivZy/18zZ1raf9LecrP0vEPbyIpODA0E4WYAHP1qTZPhsI+oqzio3QzxLvC31EscBRPSUWVpA+bpOu4f+CWcxFKXR6Cd7s32VICbG9KV92+gtnEKgCp80fn6SwOtK0/4W+B8FLToNxDvMis4XtCzvjaM4Y2I6e/O00nPoMvPaZWfiIZHkvAzxqPv3stnfn+NJ28Czb4n79RuvoOfGjCyjh+B74xKexddz4BUog+fnP/zWexGDwg6mgVolzauvnm116+/rLJf+2GJh18M34NjtfW7RqXLwu0/kX8ihwFYqvpqWftmcN01ftX0uAyfGDCd4v8vpEvSA9/bJJmeCkS/zqW+GyXD/2a+190Nmer9/icEJc5krN9U6NfwD0PqH3PHabx4/G1OGY+YXlzJXBZn8ULzvxR9HEL6XEgnbJqDZ4Sa08bpBEwN++f51fkyqxzK+475WMFUDzyEIcOkm6qFdCfsnoOK4fq9qL9xWMbKe45H9gppLlU9Gi3y98HVABkbOhEohpbJiJirURAhnXTBg/qGLaJ5qNPE27GZmjm5u0c3V+9LrUhXMpNOfHedLg6O/cqdfKQjdvb3wd4ItaBUUsqvMzB+hwMo6G4NDD0hbmNep+b1SuqjyfcC7QX+DYBu+y62Lzr88F54n8f4IiaqSyZEp+Xlhqr57oOHQxZTUwygpvnOmUcMaNJoft0oDMSshcj6CaJh1ba17+ZIg/1mXHwEZ7RVh8MZKvfbNHf31+DgIEUFyUqSTJ+sISRsSNjz8rG8PjToVNAmeqrqz1UiattlG2LAlEt+EPnBPhEyF7ceM9HrzjwXnrmw5kyQF5ogDMAbiARHXXJ3Cxf+4Tl51LJUHpjv9LwnjzEkTCTbG01gB5B0L1aw1yZXpQ2nscWH3PKcYjvubo9dX9vdXuPZgHVQYC2+VbwbeC9Zgw17EHQkiFRNt6ItHVU9rnPlP5FvoEn7LZgTKloFbxNCHw1IT7cnlm+AvDPSbF02n8qWyzhPoAnr2XXmwGxkSS3gm2VjxGzZRo2ms2Mj37rKzDKjOuEjK+FdALyFR4T5qdHzRdgj/HT4FEDxYC9R4csdY0zn5KA3RcXBaJ0vZWMapghl+EbbcaPMPSm7ihgjxvDDQObS+iUpW5OtGGTpBqFpLRiIffmjzedP4xn9T3owps6rb2u9G119rF1x4mnWeWodEq23cb///goBILmQ28HvijkPI0Htwyu//mee+HxIXaQsIhT90pJssN1w4VueYYs9TxuFWFhgF7oGie+MEtd407GOflVE0FZ6mHTSwD9EcMwaWZ8kXxKH7z+x3vuFUriSsC/IT4CgxuxUfxfk8K4XBCWAwHCi9jqI/bFNvlui8c44kBw6ZRou/q7WXFtjuHmaNMMPmETj5v/AnEojzXqVV6FAAAAAElFTkSuQmCC\n","css":"@font-face {\n\tfont-family: open-dyslexic;\n\tsrc: url(\"https://cdn.jsdelivr.net/open-dyslexic/2.1.0/ttf/OpenDyslexic-Regular.ttf\");\n}\n","title":"AccessKit","description":"Accessibility tools for Tumblr","developer":"new-xkit","version":"2.0.3","details":"Provides accessibility tools for XKit and your dashboard, such as increased font sizes, more contrast on icons and more.","frame":"false","beta":"false","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/anti_capitalism.json b/Extensions/dist/anti_capitalism.json
new file mode 100644
index 000000000..69022b9c8
--- /dev/null
+++ b/Extensions/dist/anti_capitalism.json
@@ -0,0 +1 @@
+{"id":"anti_capitalism","script":"//* TITLE Anti-Capitalism **//\n//* VERSION 1.6.6 **//\n//* DESCRIPTION Removes sponsored posts, vendor buttons, and other nonsense that wants your money. **//\n//* DEVELOPER new-xkit **//\n//* FRAME false **//\n//* BETA false **//\n\nXKit.extensions.anti_capitalism = new Object({\n\n\trunning: false,\n\thas_indicator_selector: \"\",\n\n\tpreferences: {\n\t\t\"sep0\": {\n\t\t\ttext: \"Options\",\n\t\t\ttype: \"separator\",\n\t\t},\n\t\t\"sponsored_posts\": {\n\t\t\ttext: \"Remove sponsored posts\",\n\t\t\tdefault: true,\n\t\t\tvalue: true\n\t\t},\n\t\t\"sidebar_ad\": {\n\t\t\ttext: \"Hide the Sidebar Ads\",\n\t\t\tdefault: true,\n\t\t\tvalue: true\n\t\t},\n\t\t\"takeover_ad\": {\n\t\t\ttext: \"Hide some elements from takeover ads\",\n\t\t\tdefault: true,\n\t\t\tvalue: true\n\t\t},\n\t\t\"sep1\": {\n\t\t\ttext: \"Legacy Options\",\n\t\t\ttype: \"separator\",\n\t\t},\n\t\t\"video_ad\": {\n\t\t\ttext: \"Terminate with extreme prejudice the auto-playing audio sidebar ads\",\n\t\t\tdefault: true,\n\t\t\tvalue: true\n\t\t},\n\t\t\"sponsored_ads\": {\n\t\t\ttext: \"Remove those terrible framed ads\",\n\t\t\tdefault: true,\n\t\t\tvalue: true\n\t\t},\n\t\t\"vendor_buttons\": {\n\t\t\ttext: \"Disable 'Buy' buttons on posts\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t},\n\t\t\"yahoo_view\": {\n\t\t\ttext: \"Hide the Yahoo View links on posts\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t},\n\t\t\"asktime\": {\n\t\t\ttext: \"Hide the asktime banner at the top of the dashboard\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t}\n\t},\n\n\trun: async function() {\n\t\tthis.running = true;\n\n\t\tif (XKit.page.react) {\n\t\t\tawait XKit.css_map.getCssMap();\n\n\t\t\tif (this.preferences.sponsored_posts.value) {\n\t\t\t\tconst adSelector = [\"adTimelineObject\", \"instreamAd\", \"nativeIponWebAd\", \"takeoverBanner\"]\n\t\t\t\t\t.map(key => XKit.css_map.keyToCss(key))\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.join(\", \");\n\t\t\t\tXKit.tools.add_css(`${adSelector} { display: none !important; }`, \"anti_capitalism\");\n\n\t\t\t\tconst videoCTASelector = [\"videoCTA\", \"videoImageCTA\"]\n\t\t\t\t\t.map(key => XKit.css_map.keyToClasses(key))\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.map(classes => classes.map(cls => `.${cls}:not(.anti-capitalism-done)`).join(\", \"))\n\t\t\t\t\t.join(\", \");\n\t\t\t\tthis.videoCTASelector = videoCTASelector;\n\t\t\t\tthis.listTimelineObjectInnerSelector = XKit.css_map.keyToCss(\"listTimelineObjectInner\");\n\n\t\t\t\tXKit.tools.add_css(`.anti-capitalism-hidden { display: none !important; }`, \"anti_capitalism\");\n\t\t\t\tXKit.post_listener.add(\"anti_capitalism\", this.process_posts);\n\t\t\t\tthis.process_posts();\n\t\t\t}\n\n\t\t\tif (this.preferences.sidebar_ad.value) {\n\t\t\t\tconst selector = XKit.css_map.keyToCss(\"mrecContainer\");\n\t\t\t\tXKit.interface.hide(selector, \"anti_capitalism\");\n\t\t\t}\n\n\t\t\tif (this.preferences.takeover_ad.value) {\n\t\t\t\tXKit.tools.add_css(`\n\t\t\t\t\t${XKit.css_map.keyToCss('cruelSummer')} {\n\t\t\t\t\t\tdisplay: none !important;\n\t\t\t\t\t}\n\t\t\t\t`, \"anti_capitalism\");\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (XKit.extensions.anti_capitalism.preferences.vendor_buttons.value) {\n\t\t\tXKit.tools.add_css(\" .post .vendor_button {display: none;}\", \"anti_capitalism\");\n\t\t}\n\n\t\tif (XKit.extensions.anti_capitalism.preferences.sponsored_posts.value) {\n\t\t\tXKit.tools.add_css(\" .post.sponsored_post {display:none}\", \"anti_capitalism\");\n\t\t}\n\n\t\tif (XKit.extensions.anti_capitalism.preferences.sponsored_ads.value) {\n\t\t\tXKit.tools.add_css(\" .remnant-unit-container, .yamplus-unit-container, .yam-plus-ad-container, .yam-plus-header, .video-ad-container, .video-ad, .standalone-ad-container, .dfp-ad-container {display: none;}\", \"anti_capitalism\");\n\t\t}\n\n\t\tif (XKit.extensions.anti_capitalism.preferences.asktime.value) {\n\t\t\tXKit.tools.add_css(\" .notification.single_notification.alt.takeover-container { display: none; } \", \"anti_capitalism\");\n\t\t}\n\n\t\tif (XKit.extensions.anti_capitalism.preferences.yahoo_view.value) {\n\t\t\tXKit.tools.add_css(' .recommendation-reason-link[href*=\"//view.yahoo.com\"], .recommendation-reason-link[href*=\"%2F%2Fview.yahoo.com\"] { display: none; } ', \"anti_capitalism\");\n\t\t}\n\n\t\tif (XKit.extensions.anti_capitalism.preferences.sidebar_ad.value) {\n\t\t\tXKit.tools.add_css(' .sidebar-ad { display: none; } ', \"anti_capitalism\");\n\t\t}\n\n\t\tif (this.preferences.video_ad.value) {\n\t\t\tthis.interval_id = setInterval(function() {\n\t\t\t\tvar players = $(\".sidebar-ad-content iframe, .sponsored_post iframe, .sponsored_post video, .standalone-ad-container video\");\n\t\t\t\t// Pause + remove src of video tags to prevent audio from persisting after DOM removal\n\t\t\t\tvar videos = players.filter(\"video\");\n\t\t\t\tif (videos.length) {\n\t\t\t\t\tvideos.trigger(\"pause\");\n\t\t\t\t\tvideos.attr(\"src\", \"\");\n\t\t\t\t}\n\t\t\t\tif (players.length) {\n\t\t\t\t\tplayers.remove();\n\t\t\t\t}\n\t\t\t}, 400);\n\t\t}\n\t},\n\n\tprocess_posts: async function() {\n\t\tconst {videoCTASelector, listTimelineObjectInnerSelector} = XKit.extensions.anti_capitalism;\n\t\tconst $containers = $(videoCTASelector).addClass(\"anti-capitalism-done\");\n\t\tfor (let container of $containers.get()) {\n\t\t\t$(container).closest(listTimelineObjectInnerSelector).addClass('anti-capitalism-hidden');\n\t\t}\n\t},\n\n\tdestroy: function() {\n\t\tthis.running = false;\n\t\t$('anti-capitalism-done').removeClass('anti-capitalism-done');\n\t\t$('anti-capitalism-hidden').removeClass('anti-capitalism-hidden');\n\t\tXKit.tools.remove_css(\"anti_capitalism\");\n\t\ttry {\n\t\t\tXKit.post_listener.remove(\"anti_capitalism\", this.process_posts);\n\t\t} catch (e) {\n\t\t\t//no listener to remove\n\t\t}\n\t\tclearInterval(this.interval_id);\n\t}\n\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,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\n","title":"Anti-Capitalism","description":"Removes sponsored posts, vendor buttons, and other nonsense that wants your money.","developer":"new-xkit","version":"1.6.6","frame":"false","beta":"false","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/audio_downloader.json b/Extensions/dist/audio_downloader.json
new file mode 100644
index 000000000..2619b7f13
--- /dev/null
+++ b/Extensions/dist/audio_downloader.json
@@ -0,0 +1 @@
+{"id":"audio_downloader","script":"//* TITLE Audio Downloader **//\n//* VERSION 3.0.2 **//\n//* DESCRIPTION Lets you download audio posts hosted on Tumblr **//\n//* DEVELOPER new-xkit **//\n//* FRAME false **//\n//* BETA false **//\n//* SLOW true **//\n//* DETAILS This extension allows you to download audio posts as MP3 files on your computer. Please note that it only works on audio hosted on Tumblr. If they were posted from Spotify, SoundCloud, YouTube or any other service, it won't work. **//\n\nXKit.extensions.audio_downloader = new Object({\n\n\tslow: true,\n\trunning: false,\n\tapiKey: XKit.api_key,\n\taudioBlockClass: \"\",\n\n\tbutton_icon: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QkY1MzdFN0ExNTU3MTFFMzlCNjJGNTNDQTgzRjc3M0UiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QkY1MzdFN0IxNTU3MTFFMzlCNjJGNTNDQTgzRjc3M0UiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCRjUzN0U3ODE1NTcxMUUzOUI2MkY1M0NBODNGNzczRSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCRjUzN0U3OTE1NTcxMUUzOUI2MkY1M0NBODNGNzczRSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PuxbowMAAACcSURBVHja7NTBDYAgDABA6gKMQpzEURiFERyFERiFEZCamlTToqIvY5O+aO/RlEIpxUgBAOJDrQejxGBejB/7EobhcX0epl/3lZY2PoAiGhyzNXMHhD12hxHoOjC39e8wAv3dOakYgfMFaD72aRjOLzWgxOfUxNj8sjJwJ/WoGIGTgE1afRMjMDAotGoxQbu07OImurDj2VdaBBgAbglVZHbAZ/wAAAAASUVORK5CYII=\",\n\n\trun: function() {\n\n\t\tif (XKit.page.react) {\n\t\t\tXKit.tools.async_add_function(async () => {\n\t\t\t\t/* globals tumblr */\n\t\t\t\treturn await tumblr.getCssMap();\n\t\t\t})\n\t\t\t.then(({audioBlock}) => {\n\t\t\t\tthis.audioBlockClass = `.${audioBlock[0]}`;\n\t\t\t\tthis.react_add_buttons();\n\t\t\t\tXKit.post_listener.add('audio_downloader', this.react_add_buttons);\n\t\t\t});\n\n\t\t\treturn;\n\t\t}\n\n\t\tXKit.tools.init_css(\"audio_downloader\");\n\n\t\tif (XKit.storage.get(\"audio_downloader\", \"shown_welcome\", \"false\") === \"false\") {\n\t\t\tXKit.window.show(\"Welcome to Audio Downloader!\", \"If an audio post is downloadable, an arrow will appear next to the Like button that allows you to download the audio post as an MP3 file.
Please note that Audio Downloader only works on MP3 files hosted on Tumblr: any file shared on Tumblr from other services such as Spotify or SoundCloud can not be downloaded. In that case, the download arrow will not appear on the post.\", \"info\", \"
\n\t\t\t`);\n\t\t});\n\n\t\t$(\".audio_downloader:not(.download_ready)\").each(function() {\n\t\t\t$(this).addClass(\"download_ready\");\n\t\t\tthis.onclick = function(event) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tconst src = this.getAttribute('data-src');\n\t\t\t\tconst filename = (new URL(src)).pathname.replace(\"/\", \"\");\n\n\t\t\t\tfetch(src)\n\t\t\t\t.then(response => response.blob())\n\t\t\t\t.then(blob => {\n\t\t\t\t\tconst blob_url = window.URL.createObjectURL(blob);\n\t\t\t\t\tconst download_link = Object.assign(document.createElement('a'), {\n\t\t\t\t\t\tstyle: { display: 'none' },\n\t\t\t\t\t\thref: blob_url,\n\t\t\t\t\t\tdownload: filename,\n\t\t\t\t\t});\n\t\t\t\t\tdocument.body.appendChild(download_link);\n\t\t\t\t\tdownload_link.click();\n\t\t\t\t\tdownload_link.parentElement.removeChild(download_link);\n\t\t\t\t\twindow.URL.revokeObjectURL(blob_url);\n\t\t\t\t});\n\t\t\t};\n\t\t});\n\t},\n\n\tinit: function() {\n\n\t\t$(document).on(\"click\", \".xkit-audio-downloader\", function(event) {\n\t\t\tvar post_id = $(this).attr('data-post-id');\n\t\t\tvar username = $(this).attr('data-xkit-audio-downloader-tumblelog-name');\n\t\t\tif (XKit.interface.where().queue === true || XKit.interface.where().drafts === true) {\n\t\t\t\tvar m_post = XKit.interface.find_post(post_id);\n\t\t\t\tif (m_post.reblogged === false) { return; }\n\t\t\t\tXKit.extensions.audio_downloader.download(m_post.reblog_original_id, m_post.reblog_owner);\n\t\t\t} else {\n\t\t\t\tXKit.extensions.audio_downloader.download(post_id, username);\n\t\t\t}\n\t\t});\n\n\t},\n\n\tdownload: function(post_id, username) {\n\n\t\tvar api_url = \"https://api.tumblr.com/v2/blog/\" + username + \".tumblr.com/posts\" + \"?api_key=\" + XKit.extensions.audio_downloader.apiKey + \"&id=\" + post_id;\n\n\t\tGM_xmlhttpRequest({\n\t\t\tmethod: \"GET\",\n\t\t\turl: api_url,\n\t\t\tjson: true,\n\t\t\tonload: function(response) {\n\t\t\t\ttry {\n\n\t\t\t\t\tvar data = JSON.parse(response.responseText);\n\t\t\t\t\tvar obj = data.response;\n\n\t\t\t\t\tif (typeof obj.posts[0] === \"undefined\") {\n\t\t\t\t\t\treturn XKit.extensions.audio_downloader.show_error(\"13\");\n\t\t\t\t\t}\n\n\t\t\t\t\tif (obj.posts[0].audio_type == \"tumblr\") {\n\t\t\t\t\t\tvar m_url = obj.posts[0].audio_url;\n\t\t\t\t\t\tif (m_url.indexOf('https://www.tumblr.com/audio_file/') === 0) {\n\t\t\t\t\t\t\tm_url = 'http://a.tumblr.com/' + m_url.substr(m_url.lastIndexOf('/') + 1) + 'o1.mp3?plead=please-dont-download-this-or-our-lawyers-wont-let-us-host-audio';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tvar m_id = \"audio_\" + XKit.extensions.audio_downloader.make_id();\n\n\t\t\t\t\tvar audio_name = obj.posts[0].track_name;\n\t\t\t\t\tvar audio_author = obj.posts[0].artist;\n\n\t\t\t\t\tif (typeof audio_author == \"undefined\" || audio_author === \"\") {\n\t\t\t\t\t\taudio_author = \"unknown\";\n\t\t\t\t\t}\n\n\t\t\t\t\tif (typeof audio_name !== \"undefined\" && audio_name !== \"\") {\n\t\t\t\t\t\tm_id = audio_name.replace(/\\W/g, '') + \"__\" + audio_author.replace(/\\W/g, '');\n\t\t\t\t\t}\n\n\t\t\t\t\tvar m_titles = [ \"You probably wouldn't steal a car.\", \"The Big-Bro Warning\", \"Watch it, they are watching you.\", \"Do you want Metallica to starve to death?\", \"Psst. Behind you.\", \"Would you download a car?\", \"You are too pretty to go to jail.\", \"Oh I hope you are not doing what I think you are doing.\", \"Xenixlet Sez: Buy music!\", \"You are downloading a Mitt Romney audio snippet, right?\", \"Insert sassy title here\", \"The P in MP3 might mean Prison y'know.\", \"NSA means No Stealing Audio (or something else perhaps, not sure.)\", \"Don't make the headlines\", \"STOP TAKING PICTURES OF ME IT IS MAKING ME UNCOMFORTABLE!\" ];\n\t\t\t\t\tvar m_index = Math.floor(Math.random() * m_titles.length);\n\n\t\t\t\t\tvar m_title = m_titles[m_index];\n\n\t\t\t\t\tXKit.window.show(m_title, \"This functionality is provided in good faith. Please keep in mind the laws while using it: if you think downloading this file might be a copyright violation, hit Cancel now.\", \"warning\", \"Download File
Cancel
\");\n\n\t\t\t\t\t$(\"#xkit-get-audio-button-start\").click(function() {\n\n\t\t\t\t\t\tXKit.notifications.add(\"Your download will begin any second now.\", \"ok\");\n\t\t\t\t\t\tXKit.window.close();\n\n\t\t\t\t\t});\n\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\tXKit.extensions.audio_downloader.show_error(\"12 - \" + e.message);\n\n\t\t\t\t}\n\n\t\t\t},\n\t\t\tonerror: function() {\n\n\t\t\t\tXKit.extensions.audio_downloader.show_error(\"11\");\n\n\t\t\t}\n\t\t});\n\n\t},\n\n\tmake_id: function() {\n\n\t\tvar text = \"\";\n\t\tvar possible = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n\n\t\tfor (var i = 0; i < 15; i++) {\n\t\t\ttext += possible.charAt(Math.floor(Math.random() * possible.length));\n\t\t}\n\n\t\treturn text;\n\n\t},\n\n\tshow_error: function(error_code) {\n\n\t\tXKit.window.show(\"Can't fetch audio information\", \"I'm sorry but I could not fetch information needed to download this file.
There might be a problem with Tumblr servers, or perhaps the user removed the post.
\";\n\n\t\tXKit.window.show(\"Export Blacklist\", \"Blacklist Contents in JSON:\" + m_html, \"info\", \"
OK
\");\n\n\t\t$(\"#xkit-blacklist-share-code\").nanoScroller();\n\t\t$(\"#xkit-blacklist-share-code\").nanoScroller({ scroll: 'top' });\n\n\t\t$(\"#xkit-blacklist-share-code\").click(function() { $(this).selectText();});\n\n\t},\n\n\timport: function(m_div) {\n\n\t\tXKit.window.show(\"Import\", \"You can import settings from Tumblr Savior/XKit. Go to your Tumblr Savior's Save/Load panel and paste the text below to import your blacklisted/whitelisted words.\", \"question\", \"
Import!
Cancel
\");\n\n\t\t$(\"#xkit-blacklist-replace-on-import\").click(function() {\n\t\t\t$(this).toggleClass(\"selected\");\n\t\t});\n\n\t\t$(\"#xkit-blacklist-add-words\").click(function() {\n\n\t\t\tvar $m_to_add = $(\"#xkit-blacklist-import-words\");\n\t\t\tvar m_to_add = $m_to_add.val();\n\n\t\t\tif (m_to_add === \"\" || $.trim(m_to_add) === \"\") {\n\t\t\t\t$m_to_add\n\t\t\t\t\t.css(\"border-color\", \"red\")\n\t\t\t\t\t.attr(\"placeholder\", \"You forgot to paste anything.\")\n\t\t\t\t\t.val(\"\")\n\t\t\t\t\t.click(function() {\n\t\t\t\t\t\t$m_to_add\n\t\t\t\t\t\t\t.removeAttr(\"style\")\n\t\t\t\t\t\t\t.attr(\"placeholder\", \"Paste preferences text here.\")\n\t\t\t\t\t\t\t.off(\"click\");\n\t\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar m_obj = null;\n\t\t\ttry {\n\n\t\t\t\tm_obj = JSON.parse(m_to_add);\n\n\t\t\t} catch (e) {\n\t\t\t\tXKit.window.show(\"Invalid or corrupt data.\",\n\t\t\t\t\t\"The JSON you inputted could not be read. \" +\n\t\t\t\t\t\"Be sure you are copy/pasting the right file in its entirety.
Words that already exist in your list are not added. Your settings are not carried from Tumblr Savior, so you might want to check the settings to configure Blacklist to your liking.\", \"info\", \"
OK
\");\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\tXKit.window.show(\"Results\",\t\"Imported from version \" + m_obj.version + \" of Tumblr Savior. \" +\n\t\t\t\t\t\t\t\t\t\"Added \" + blacklist_count + \" new words to the blacklist. \" +\n\t\t\t\t\t\t\t\t\t\"Added \" + whitelist_count + \" new words to the whitelist.
Words that already exist in your list are not added. Your settings are not carried from Tumblr Savior, so you might want to check the settings to configure Blacklist to your liking.\", \"info\", \"
OK
\");\n\n\t\t\t\t}\n\n\t\t\t\tXKit.extensions.blacklist.save_blacklist();\n\n\t\t\t} else {\n\n\t\t\t\tXKit.window.show(\"Results\", \"No words were imported. It might be possible that all the words in your import were already in your blacklist.\", \"info\", \"
OK
\");\n\n\t\t\t}\n\n\t\t\tXKit.extensions.blacklist.cpanel(m_div);\n\t\t\tXKit.extensions.xkit_preferences.restart_extension(\"blacklist\");\n\n\t\t\t/*if (typeof m_text === \"undefined\" || m_text === \"\") {\n\t\t\t\tXKit.extensions.blacklist.cpanel(m_div);\n\t\t\t} else {\n\t\t\t\tXKit.notifications.add(\"Added to blacklist.\",\"ok\");\n\t\t\t}\n\t\t\tXKit.extensions.xkit_preferences.restart_extension(\"blacklist\");\n\t\t\t*/\n\n\t\t});\n\n\t},\n\n\tshow_add: function(m_text, m_div, from_shortcut) {\n\n\t\tXKit.window.show(\"Add word to blacklist/whitelist\", \"Enter the word you want to add. Your words can not contain commas or backslashes.
Add to whitelist
Before adding a word, please check \\\"Tips\\\" section.\", \"question\", \"
Add word
Cancel
\");\n\n\t\tif (typeof m_text !== \"undefined\" && m_text !== \"\") {\n\t\t\t$(\"#xkit-blacklist-word\").val(m_text);\n\t\t}\n\n\t\t$(\"#xkit-blacklist-add-to-whitelist\").click(function() {\n\t\t\t$(this).toggleClass(\"selected\");\n\t\t});\n\n\t\t$(\"#xkit-blacklist-add-word\").click(function() {\n\n\t\t\tvar $m_to_add = $(\"#xkit-blacklist-word\");\n\t\t\tvar m_to_add = $m_to_add.val().replace(/\\u200B/g, '');\n\t\t\tfunction complain(problem) {\n\t\t\t\t$m_to_add\n\t\t\t\t\t.css(\"border-color\", \"red\")\n\t\t\t\t\t.attr(\"placeholder\", problem)\n\t\t\t\t\t.val(\"\")\n\t\t\t\t\t.click(function() {\n\t\t\t\t\t\t$m_to_add\n\t\t\t\t\t\t\t.removeAttr(\"style\")\n\t\t\t\t\t\t\t.attr(\"placeholder\", \"Enter a word here.\")\n\t\t\t\t\t\t\t.off(\"click\");\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (m_to_add === \"\" || $.trim(m_to_add) === \"\") {\n\t\t\t\tcomplain(\"Not even XKit can save you from ALL posts.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (m_to_add.indexOf(\",\") !== -1) {\n\t\t\t\tcomplain(\"The word you enter cannot have commas in it.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (m_to_add.indexOf(\"\\\\\") !== -1) {\n\t\t\t\tcomplain(\"The word you enter cannot have backslashes in it.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (m_to_add.length <= 1) {\n\t\t\t\tcomplain(\"Words must be at least two characters.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (XKit.extensions.blacklist.check_if_exists(m_to_add) === true) {\n\t\t\t\tcomplain(m_to_add + \" is already in the blacklist.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!$(\"#xkit-blacklist-add-to-whitelist\").hasClass(\"selected\")) {\n\n\t\t\t\tXKit.extensions.blacklist.blacklisted.push(m_to_add);\n\t\t\t\tXKit.extensions.blacklist.save_blacklist();\n\n\t\t\t} else {\n\n\t\t\t\tXKit.extensions.blacklist.whitelisted.push(m_to_add);\n\t\t\t\tXKit.extensions.blacklist.save_blacklist();\n\n\t\t\t}\n\n\t\t\tif ((typeof m_text === \"undefined\" || m_text === \"\") && from_shortcut !== true) {\n\t\t\t\tXKit.extensions.blacklist.cpanel(m_div);\n\t\t\t} else {\n\t\t\t\tif (!$(\"#xkit-blacklist-add-to-whitelist\").hasClass(\"selected\")) {\n\t\t\t\t\tXKit.notifications.add(\"Added to blacklist.\", \"ok\");\n\t\t\t\t} else {\n\t\t\t\t\tXKit.notifications.add(\"Added to whitelist.\", \"ok\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tXKit.extensions.xkit_preferences.restart_extension(\"blacklist\");\n\t\t\tXKit.window.close();\n\n\t\t});\n\n\t},\n\n\tcheck: function() {\n\n\t\tvar height_changed = false;\n\n\t\tif (XKit.extensions.blacklist.running !== true) {return; }\n\n\t\t// Refuse to process anything within the new post form\n\t\t$('.post-form .post').not('.xblacklist-done').each(function() {\n\t\t\t$(this).addClass('xblacklist-done');\n\t\t\treturn;\n\t\t});\n\n\t\tconst postSel = XKit.css_map.keyToCss('listTimelineObject') || '.post';\n\t\t$(postSel).not(\".xblacklist-done\").each(function() {\n\n\t\t\ttry {\n\n\t\t\t\t// Check if it's something we should not touch.\n\t\t\t\tif ($(this).attr('id') === \"new_post\") { return; }\n\t\t\t\t//if ($(this).css(\"display\") === \"none\") { return; }\n\n\t\t\t\t// $(this).css(\"background\",\"green\");\n\n\t\t\t\t// if has no text content, no need to do this.\n\t\t\t\t// if ($(this).find(\".post_content\").length <= 0 && $(this).find(\".post_body\").length <=0 &&) { $(this).css(\"background\",\"blue\"); return; }\n\n\t\t\t\t// Add class to not do this twice.\n\t\t\t\t$(this).addClass(\"xblacklist-done\");\n\n\t\t\t\tif (XKit.extensions.blacklist.preferences.dont_block_me.value && $(this).find(`[aria-label='${XKit.extensions.blacklist.edit_label}']`).length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Collect the tags\n\t\t\t\tvar tag_array = [];\n\t\t\t\tconst tagSel = XKit.css_map.keyToCss('tag') || '.post_tag';\n\t\t\t\tif ($(this).find(tagSel).length > 0) {\n\t\t\t\t\t$(this).find(tagSel).each(function() {\n\t\t\t\t\t\ttag_array.push($(this).text().trim().replace(\"#\", \"\").toLowerCase());\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Collect the title contents too.\n\t\t\t\tvar m_title = \"\";\n\t\t\t\tif ($(this).find(\".post_title, .reblog-title\").length > 0) {\n\t\t\t\t\tm_title = $(this).find(\".post_title, .reblog-title\").html();\n\t\t\t\t}\n\n\t\t\t\t// Collect the author info, if the option is toggled.\n\t\t\t\tvar m_author = \"\";\n\t\t\t\tif (XKit.extensions.blacklist.preferences.check_authors.value) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst postInfoSel = XKit.css_map.keyToCss('blogLink') ||\n\t\t\t\t\t\t\t'.post_info_link, .reblog-tumblelog-name';\n\t\t\t\t\t\tvar post_info_links = $(this).find(postInfoSel).map(function() {\n\t\t\t\t\t\t\treturn $(this).text();\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// Join the text of the post info links with spaces\n\t\t\t\t\t\tm_author += post_info_links.get().join(\" \");\n\n\t\t\t\t\t\tconst contentSourceSel = XKit.css_map.keyToCss('contentSource') || '.reblog_source';\n\t\t\t\t\t\tif ($(this).find(contentSourceSel).length > 0) {\n\t\t\t\t\t\t\tm_author = m_author + \" \" + $(this).find(contentSourceSel).find(\"a\").html();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ($(this).find(\".post_source_link\").length > 0) {\n\t\t\t\t\t\t\tm_author = m_author + \" \" + $(this).find(\".post_source_link\").html();\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconsole.log(\" !! can't get author !!\");\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Collect the content.\n\t\t\t\tvar m_content = \"\";\n\n\t\t\t\t// Old methods of finding content\n\t\t\t\tif ($(this).find('.post_text_wrapper').length > 0) {\n\t\t\t\t\tm_content = $(this).find('.post_text_wrapper').html();\n\t\t\t\t}\n\n\t\t\t\tif ($(this).find(\".post_body\").length > 0) {\n\t\t\t\t\tm_content = $(this).find(\".post_body\").html();\n\t\t\t\t}\n\n\t\t\t\t// Link buttons (link post's content) live inside a .post_media\n\t\t\t\t// which can coexist with a .post_body.\n\t\t\t\tif ($(this).find(\".post_media\").length > 0) {\n\t\t\t\t\tm_content += \" \" + $(this).find(\".post_media\").html();\n\t\t\t\t}\n\n\t\t\t\tif ($(this).find(\".caption\").length > 0) {\n\t\t\t\t\tm_content = $(this).find(\".caption\").html();\n\t\t\t\t}\n\n\t\t\t\tif ($(this).find(\".reblog-content\").length > 0) {\n\t\t\t\t\tm_content = $(this).find(\".reblog-content\").map(function() {\n\t\t\t\t\t return $(this).html();\n\t\t\t\t\t}).get().join(\" \");\n\t\t\t\t}\n\n\t\t\t\t// New method for finding content on react. \"link\" finds the content of link posts\n\t\t\t\tconst contentSel = XKit.css_map.keyToCss('textBlock') + \",\" + XKit.css_map.keyToCss('link');\n\t\t\t\tvar content = $(this).find(contentSel);\n\t\t\t\tif (content.length) {\n\t\t\t\t\tm_content += content.map(function() {\n\t\t\t\t\t return $(this).html();\n\t\t\t\t\t}).get().join(\" \");\n\t\t\t\t}\n\n\t\t\t\tm_content = m_content + \" \" + m_title;\n\n\t\t\t\tif (XKit.extensions.blacklist.preferences.check_authors.value) {\n\t\t\t\t\tm_content = m_content + \" \" + m_author;\n\t\t\t\t}\n\n\t\t\t\tm_content = XKit.tools.replace_all(m_content, \" \", \" \");\n\t\t\t\tm_content = m_content.toLowerCase();\n\n\t\t\t // Preserve href links.\n\t\t\t m_content = m_content.replace(/]*?\\s+)?href=\"([^\"]*)\".*?>/gm, ' $1 ');\n\t\t\t\t// Strip HTML tags.\n\t\t\t\tm_content = m_content.replace(/<(?:.|\\n)*?>/gm, ' ');\n\n\t\t\t\t//console.log('all the content is', m_content);\n\n\t\t\t\tvar m_result = XKit.extensions.blacklist.do_post($(this), m_content, tag_array);\n\t\t\t\tif (m_result !== \"\") {\n\t\t\t\t\theight_changed = true;\n\t\t\t\t\t//$(this).css(\"background\",\"red\");\n\t\t\t\t\tXKit.extensions.blacklist.hide_post($(this), m_result);\n\t\t\t\t} else {\n\t\t\t\t\t//$(this).css(\"background\",\"green\");\n\t\t\t\t}\n\n\t\t\t} catch (e) {\n\n\t\t\t\tconsole.error(\"Blacklist can't parse post: \" + e.message);\n\t\t\t\t// $(this).css(\"background\",\"red\");\n\n\t\t\t}\n\n\t\t});\n\n\t\tif (height_changed) {\n\t\t\tsetTimeout(function() {\n\n\t\t\t\tXKit.tools.add_function(function() {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (typeof Tumblr === \"undefined\") {\n\t\t\t\t\t\t\tsetTimeout(function() {\n\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tTumblr.Events.trigger(\"DOMEventor:updateRect\");\n\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t// console.log(\"!!! XKit blacklist ---> \" + e.message);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}, 1000);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tTumblr.Events.trigger(\"DOMEventor:updateRect\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t// console.log(\"!!! XKit blacklist ---> \" + e.message);\n\t\t\t\t\t}\n\t\t\t\t}, true, \"\");\n\n\t\t\t}, 300);\n\t\t}\n\t},\n\n\thide_post: function($post, word) {\n\t\tconst {\n\t\t\tdont_block_me,\n\t\t\tdont_block_liked,\n\t\t\tdont_display,\n\t\t\tshow_type,\n\t\t\tdont_show_cause,\n\t\t\tmini_block,\n\t\t\tshow_tags\n\t\t} = this.preferences;\n\n\t\tif (dont_block_me.value && $post.hasClass('is_mine')) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (dont_block_liked.value && $post.find('.post_control.like.liked').length !== 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (dont_display.value) {\n\t\t\t$post.addClass('xblacklist_hidden_post');\n\t\t\treturn;\n\t\t}\n\n\t\tconst cause = dont_show_cause.value ?\n\t\t\t''\n\t\t\t: `Blocked because it contains the word "${word}"`;\n\n\t\tconst post_type_div = show_type.value ?\n\t\t\t`
Bookmarked post not found.\" +\n\t\t\t\" This might be because the post has been deleted, or because of a temporary Tumblr error. Posts made around the same time as the bookmarked post is listed below.
\");\n\t\t$(\"#xbookmarks\").slideDown('fast');\n\t\t$(\"#xbookmarker_small_links\").slideDown('fast');\n\t\t$(\".xbookmark_to_slidedown\").slideDown('fast');\n\n\t\tif ($(\".xbookmark\").length > 0) {\n\t\t\t$('#xkit_bookmark_no_bookmarks').hide();\n\t\t} else {\n\t\t\t$('#xkit_bookmark_no_bookmarks').show();\n\t\t}\n\n\t\t$(\"#xbookmarker_help\").click(function() {\n\n\t\t\tXKit.window.show(\"Bookmarker Help\", \"Bookmarker lists your bookmarks on the sidebar.
To rename or delete a bookmark, you can click them while holding the ALT key on your keyboard.
To go back to a bookmarked post, just click on the bookmark. If the post you've bookmarked is deleted, you'll get the posts made around that time.\", \"info\", \"
OK
\");\n\n\t\t\treturn false;\n\t\t});\n\n\t\t$(\"#xbookmarker_delete_all\").click(function() {\n\n\t\t\tXKit.window.show(\"Delete all bookmarks\", \"You sure about this?\", \"question\", \"
OK
Cancel
\");\n\n\t\t\t$(\"#xkit-bookmarker-delete-all-ok\").click(function() {\n\n\t\t\t\tXKit.window.close();\n\t\t\t\tXKit.extensions.bookmarker.remove_all_bookmarks();\n\n\t\t\t});\n\n\t\t\treturn false;\n\t\t});\n\n\t\t$(document).on(\"click\", \".xkit_bookmarker_button\", function(event) {\n\n\t\t\tvar post_id = $(this).attr('data-xkit-bookmarker-post-id');\n\t\t\tif ($(this).hasClass(\"on\") === true) {\n\t\t\t\t$(this).removeClass(\"on\");\n\t\t\t\tXKit.extensions.bookmarker.remove_bookmark(post_id);\n\n\t\t\t} else {\n\t\t\t\t$(this).addClass(\"on\");\n\t\t\t\tXKit.extensions.bookmarker.add_bookmark(post_id);\n\t\t\t}\n\n\t\t});\n\n\n\t\t$(document).on(\"click\", \".xbookmark\", function(event) {\n\n\t\t\tvar post_id = $(this).attr('data-xkit-bookmark-post-id');\n\n\t\t\tvar m_object = XKit.extensions.bookmarker.retrieve_bookmark_object(post_id);\n\n\t\t\tif (event.altKey) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\t// Ask for the caption.\n\t\t\t\tXKit.window.show(\"Rename/Delete bookmark\", \"What would you like to rename this to? \", \"question\", \"
\n\t\t\t`;\n\n\t\t\tif (this.preferences.prepend_sidebar.value === true) {\n\t\t\t\t$sidebar.prepend(m_html);\n\t\t\t} else {\n\t\t\t\t$sidebar.append(m_html);\n\t\t\t}\n\t\t}\n\n\t\tvar target = $container[0];\n\t\tthis.observer.observe(target, {\n\t\t\tsubtree: true,\n\t\t\tchildList: true\n\t\t});\n\n\t\tthis.update_tag_counts(2 * 60 * 1000); //start at 2 minutes\n\t},\n\n\tdestroy: function() {\n\t\tXKit.tools.remove_css(\"classic_tags\");\n\t\t$(\"#xtags\").remove();\n\t\tXKit.extensions.classic_tags.search_input.attr(\"placeholder\", XKit.extensions.classic_tags.placeholder);\n\t\tXKit.extensions.classic_tags.observer.disconnect();\n\t\tclearTimeout(XKit.extensions.classic_tags.count_update_handle);\n\t}\n\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpGNzdGMTE3NDA3MjA2ODExODA4MzkyMjM2MzU5MTQ4NCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpGRUZGRjZFNTM4QzYxMUUzQTFDQUFDOThEMTlDRUY3OSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpGRUZGRjZFNDM4QzYxMUUzQTFDQUFDOThEMTlDRUY3OSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZCN0YxMTc0MDcyMDY4MTE4MDgzOTIyMzYzNTkxNDg0IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkY3N0YxMTc0MDcyMDY4MTE4MDgzOTIyMzYzNTkxNDg0Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+QJeL+wAAAlRJREFUeNrsVktPE1EU/qaPQAoSCXsMGEiMiQuE0vLQKo8YN/4BQdCVLjQhcevCPX/BDStdsCFBbICIKZRCeDYh1No2PIohGlEaZopQ6r3TUefe3hmnJrPS05Nmbufc7+v5zj1nRpooz8NOc8Bm+0/wR3NJTpsJYDeBxIrUc4DvX3B2DMkN5KiEzjIcJRAdxGkGgQSNSb/E5hMaY8WkYA3TBz2fDUNnfTjfjsvD9Poojjm/tSKTDPResPwJ9l4hE2VCW4P4OKLhVjSgLQxur9Dph3HVNp9h4zEWbkPZ1alZha405BTC135yzIPfXuQOyQW9Fywnq9dEvDNWUDe6diAnMR+gS089/LPgEHifqmVqcHOLfp98w+4IqonozQJZSXnfNsJzEb5prR6RbuMiT9cxBDeSlkpHOGYuoaIR3gm6JDkZcThIo+nd6gAoQyAOOYHILU2r1klwUAXnT9HXJascZHMghmwKkV6NwzspOkVcTdb7cbhewiS7HsNxGit3VY4L8E4VFfndldIeOJ1rgh9DV+GshE9FPz1EuNN42HUsm6GHmgxu5JHLaKectIse0/Xr7FvSXRS8OkBBm8e05UofE8ZnYD5hio/Z2n3IMbS8huuctlQ+cBmwe/whM4JwRxH6e3jf0AxoKvegJPg/8fcSRR9BSdJGI+WlZA+Q3RJoyBOYNL2eIP6cwrWMw+lRyR6K0QUEhdY3sgW1b7df4GAOdUO/0ZUUjJQQT1OTDPbHsD9KLz4F6TNu4ymyO6bTdPGOvW92pRX5HyWw/b3IbS/BDwEGAPg3rFrD0wEGAAAAAElFTkSuQmCC","css":".xtag {\n\tborder-top: 1px solid rgba(var(--white-on-dark), 0.07);\n\tposition: relative;\n\tpadding: 0;\n}\n\n.xtag a {\n\ttext-decoration: none;\n}\n\n.xtag.hidden {\n\tdisplay: none !important;\n\tvisibility: hidden !important;\n}\n\n.xtag.selected, .xtag:hover {\n\tbackground-color: rgba(var(--white-on-dark), 0.07);\n}\n\n.xtag .hide_overflow {\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n\n.xtag .result_title {\n\twidth: 88% !important;\n\tcolor: rgba(var(--white-on-dark), 0.65);\n\tpadding-left: 3px;\n\tfont-weight: 700;\n\tposition: absolute;\n\tline-height: 30px;\n}\n\n.xtag .result_icon {\n\tdisplay: inline-block;\n\theight: 18px;\n\tpadding: 6px 6px 6px 13px;\n}\n\n.xtag a .count {\n\ttop: 8px;\n\tposition: absolute;\n\tright: 10px;\n\tcolor: rgba(var(--white-on-dark), 0.65);\n\tfont-weight: 400;\n}\n\n.result_sub_title {\n\tfont-weight: 700 !important;\n\tpadding: 9px 0;\n}\n\n.classic-tags-too-much-tags-error {\n\tfont-size: 13px;\n\ttext-align: center;\n\tpadding: 10px 10px;\n\tmargin-top: 3px;\n\tbackground: rgba(0, 0, 0, 0.06);\n\tcolor: rgba(var(--white-on-dark), 0.4);\n}\n","title":"Tag Tracking+","description":"Shows your tracked tags on your sidebar","developer":"new-xkit","version":"1.6.12","frame":"false","beta":"false","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/cleanfeed.json b/Extensions/dist/cleanfeed.json
new file mode 100644
index 000000000..a26077392
--- /dev/null
+++ b/Extensions/dist/cleanfeed.json
@@ -0,0 +1 @@
+{"id":"cleanfeed","script":"//* TITLE CleanFeed **//\n//* VERSION 1.5.5 **//\n//* DESCRIPTION Browse safely in public **//\n//* DEVELOPER STUDIOXENIX **//\n//* DETAILS This extension, when enabled, hides photo posts until you hover over them. Useful to browse Tumblr in a workspace or in public, and not worry about NSFW stuff appearing. You can also set it to hide avatars and not show non-text posts at all. To activate or disable it, click on the CleanFeed button on your sidebar. It will remember it's on/off setting. **//\n//* FRAME false **//\n//* BETA false **//\n//* SLOW true **//\n\nXKit.extensions.cleanfeed = new Object({\n\n\trunning: false,\n\tslow: true,\n\tadded_css: false,\n\tadded_full_block_css: false,\n\n\timg_blank: \"data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpEMUQxREZBOEJFNjgxMUUyQUNEN0YzQjYzNTI1Mzg4OCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpEMUQxREZBOUJFNjgxMUUyQUNEN0YzQjYzNTI1Mzg4OCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkNERTg1MkZGQkU2NzExRTJBQ0Q3RjNCNjM1MjUzODg4IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkNERTg1MzAwQkU2NzExRTJBQ0Q3RjNCNjM1MjUzODg4Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEAQAAAAAsAAAAAAEAAQAAAgJEAQA7\",\n\timg_lock: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAMCAYAAAC0qUeeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Q0RFODUyRkRCRTY3MTFFMkFDRDdGM0I2MzUyNTM4ODgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Q0RFODUyRkVCRTY3MTFFMkFDRDdGM0I2MzUyNTM4ODgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDREU4NTJGQkJFNjcxMUUyQUNEN0YzQjYzNTI1Mzg4OCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDREU4NTJGQ0JFNjcxMUUyQUNEN0YzQjYzNTI1Mzg4OCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PqIiqz8AAABKSURBVHjaYvj//z8DCANBPRD/x4Lr4WqgCvlxKARjfIr1oWL26IoZoRIMjIyMYAaQz8gABdjE3uNzAhJ+zwhlEAWGvWKSgg4gwAAexVkCfEIqQgAAAABJRU5ErkJggg==\",\n\timg_avatar: \"data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAA/AAD/4QMraHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjAtYzA2MCA2MS4xMzQ3NzcsIDIwMTAvMDIvMTItMTc6MzI6MDAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzUgTWFjaW50b3NoIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkQxRDFERkFDQkU2ODExRTJBQ0Q3RjNCNjM1MjUzODg4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkQxRDFERkFEQkU2ODExRTJBQ0Q3RjNCNjM1MjUzODg4Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RDFEMURGQUFCRTY4MTFFMkFDRDdGM0I2MzUyNTM4ODgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RDFEMURGQUJCRTY4MTFFMkFDRDdGM0I2MzUyNTM4ODgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAGBAQEBAQGBAQGCAUFBQgKBwYG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\",\n\n\tpreferences: {\n\t\tsep1: {\n\t\t\ttext: \"Level of Blockage\",\n\t\t\ttype: \"separator\"\n\t\t},\n\t\tfull_block: {\n\t\t\ttext: \"Use Full Block: Completely hide non-text things (audio, video, photos) on the dash\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t},\n\t\tsep2: {\n\t\t\ttext: \"Avatars\",\n\t\t\ttype: \"separator\"\n\t\t},\n\t\thide_avatars: {\n\t\t\ttext: \"Hide avatars when I turn on CleanFeed\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t},\n\t\tsep3: {\n\t\t\ttext: \"Photosets\",\n\t\t\ttype: \"separator\"\n\t\t},\n\t\tshow_all_photoset_photos: {\n\t\t\ttext: \"Show all photos at once when I hover over a photoset photo\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t}\n\t},\n\n\tstatus: \"false\",\n\tlbl_on: \"on\",\n\tlbl_off: \"off\",\n\n\trun: function() {\n\t\tthis.running = true;\n\t\tif ($(\"ol#posts\").length > 0) {\n\t\t\tXKit.extensions.cleanfeed.init();\n\t\t}\n\t},\n\n\tinit: function() {\n\n\t\tXKit.tools.init_css(\"cleanfeed\");\n\n\t\tXKit.extensions.cleanfeed.status = XKit.storage.get(\"cleanfeed\", \"status\", \"false\");\n\t\tXKit.extensions.cleanfeed.mode = XKit.storage.get(\"cleanfeed\", \"mode\", \"normal\");\n\n\t\tvar normal_text = \"\";\n\t\tif (XKit.extensions.cleanfeed.mode === \"normal\") {\n\t\t\tnormal_text = \"Normal\";\n\t\t} else {\n\t\t\tnormal_text = \"Smart\";\n\t\t}\n\n\t\tXKit.interface.sidebar.add({\n\t\t\tid: \"xcleanfeed_sidebar\",\n\t\t\ttitle: \"CleanFeed\",\n\t\t\titems: [{\n\t\t\t\tid: \"xcleanfeed_button\",\n\t\t\t\ttext: \"Filtering\",\n\t\t\t\tcount: this.lbl_off\n\t\t\t}],\n\t\t\tsmall: [\n\t\t\t\t{ id: \"xkit-cleanfeed-mode\", text: `Mode: ${normal_text}` },\n\t\t\t\t{ id: \"xkit-cleanfeed-mode-change\", text: \"change/help\" }\n\t\t\t]\n\t\t});\n\n\t\tXKit.extensions.cleanfeed.update_button();\n\n\t\t$(\"#xkit-cleanfeed-mode-change\").click(function() {\n\n\t\t\tvar opt_1 = \"\";\n\t\t\tvar opt_2 = \"\";\n\n\t\t\tif (XKit.extensions.cleanfeed.mode === \"normal\") {\n\t\t\t\topt_1 = \"selected\";\n\t\t\t} else {\n\t\t\t\topt_2 = \"selected\";\n\t\t\t}\n\n\t\t\tvar m_html = \"
Normal:Hide everything from everyone.
\" +\n\t\t\t\t\t\"
Smart:Only hide stuff from NSFW/Adult blogs.
\" +\n\t\t\t\t\t\"
\" +\n\t\t\t\t\t\t\"Important: Smart mode depends on the blog rating gathered from Tumblr servers. If you turn on Smart mode and a blog is not set as a NSFW/Adult blog, either by the blogger or Tumblr, then their posts will appear on your dashboard without any filtering. Turn on Normal mode for maximum protection against genitalia in public.\" +\n\t\t\t\t\t\"
\";\n\n\t\t\tXKit.window.show(\"Change Mode\", \"Change the mode CleanFeed works on:\" + m_html, \"question\", \"
.]+[.]?)+|((?:[^\\s()<>]+|(?:([^\\s()<>]+)))))+(?:((?:[^\\s()<>]+|(?:([^\\s()<>]+))))|[^\\s`!()[]{};:'\".,<>?]))/gi, \"$1\");\n\n\t\t$(parent).find(\".post_body\").html(m_content + m_html);\n\n\t},\n\n\tdo: function() {\n\n\t\tvar posts = XKit.interface.get_posts(\"convert-links-done\");\n\n\t\t$(posts).each(function() {\n\n\t\t\t$(this).addClass(\"convert-links-done\");\n\n\t\t\tvar m_post = XKit.interface.post($(this));\n\t\t\tif (m_post.type !== \"note\") { return; }\n\n\t\t\tvar this_id = m_post.id;\n\t\t\tXKit.interface.add_control_button(this, \"xkit-convert-links-button\", \"data-ask-id=\\\"\" + this_id + \"\\\"\");\n\n\t\t});\n\n\t},\n\n\tdestroy: function() {\n\t\tthis.running = false;\n\t}\n\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RjU2ODI1RTIyNjE2MTFFM0E4QURBMkY5NDVFMjREMzgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RjU2ODI1RTMyNjE2MTFFM0E4QURBMkY5NDVFMjREMzgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozRjA2RjY3RjI2MTAxMUUzQThBREEyRjk0NUUyNEQzOCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDozRjA2RjY4MDI2MTAxMUUzQThBREEyRjk0NUUyNEQzOCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PvM31wIAAAcQSURBVHjadFZrbBVF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","title":"Convert Links","description":"Clickable links on asks","developer":"STUDIOXENIX","version":"0.1 REV B","details":"This extension allows you to turn the 'encrypted' links that people can send you using asks to clickable ones.","frame":"false","beta":"false","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/disable_gifs.json b/Extensions/dist/disable_gifs.json
new file mode 100644
index 000000000..86ce9bb7b
--- /dev/null
+++ b/Extensions/dist/disable_gifs.json
@@ -0,0 +1 @@
+{"id":"disable_gifs","script":"//* TITLE Disable Gifs **//\n//* VERSION 1.0.0 **//\n//* DESCRIPTION Stops GIFs on dashboard **//\n//* DETAILS This is a very early preview version of an extension that allows you to stop the GIFs from playing on your dashboard. If you still would like to view them, you can click on the Play button on the post. Please note that for now, this extension can't stop GIFs added to text posts. **//\n//* DEVELOPER new-xkit **//\n//* FRAME false **//\n//* BETA false **//\n//* SLOW true **//\n\nXKit.extensions.disable_gifs = new Object({\n\n\trunning: false,\n\tbutton_icon: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkRFQzJCQjcyQjRCMTFFMzk3NjJBMTk2OEYyM0IxREYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RkRFQzJCQjgyQjRCMTFFMzk3NjJBMTk2OEYyM0IxREYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpENTA1MTcyNjJBRUMxMUUzOTc2MkExOTY4RjIzQjFERiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpGREVDMkJCNjJCNEIxMUUzOTc2MkExOTY4RjIzQjFERiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgYTp9MAAACOSURBVHjavJQNCsAgCEb3Dc/UMbb7n8YVFIlMa2ETjP6UZ2pg5iNKqAwAPnvMENB75xEopNaYgbIOtpJ5bzSkp9lQcpKGCfk1THh1WGnZTIA0lvNSi1lTC/c17GrATeW6zJuKO0nRdrsFZ2w5I6s1HLnd+tHqEFxGGXWyQbamW41W+3B7byLycwwlewQYAABheN9oKlBYAAAAAElFTkSuQmCC\",\n\ton_icon: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkRFQzJCQkIyQjRCMTFFMzk3NjJBMTk2OEYyM0IxREYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RkRFQzJCQkMyQjRCMTFFMzk3NjJBMTk2OEYyM0IxREYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGREVDMkJCOTJCNEIxMUUzOTc2MkExOTY4RjIzQjFERiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpGREVDMkJCQTJCNEIxMUUzOTc2MkExOTY4RjIzQjFERiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmuI/CcAAABySURBVHjaYvz//z8DtQALiMhZqkOyiVOirzCiizExUBGwELINHeDzBe1cRm5Y4TWM3AihnzdJjRCiXQbSBMRm+NQwkRhWJ/EZSE6YncQbZsSEDRLwp5bL/IEWb6I40RLjehZy8yHN8yYjNQtHqroMIMAAFUUpurj2PsEAAAAASUVORK5CYII=\",\n\tslow: true,\n\n\tpreferences: {\n\t\t\"hide_completely\": {\n\t\t\ttext: \"Completely hide posts with GIFs.\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t}\n\t},\n\n\trun: function() {\n\t\tthis.running = true;\n\n\t\tif (XKit.page.react) {\n\t\t\tXKit.post_listener.add('disable_gifs', this.react_do);\n\t\t\tthis.react_do();\n\n\t\t\tXKit.tools.add_css(`\n\t\t\t\tfigure:hover .xkit-paused-gif,\n\t\t\t\tfigure:hover .xkit-gif-label {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\t\t\t\t.xkit-gif-label {\n\t\t\t\t\tcolor: white;\n\t\t\t\t\tbackground-color: black;\n\t\t\t\t\theight: 1em;\n\t\t\t\t\tline-height: 1em;\n\t\t\t\t\tpadding: 5px 7px;\n\t\t\t\t\tborder-radius: 20px;\n\t\t\t\t\tposition: absolute;\n\t\t\t\t\ttop: 5px;\n\t\t\t\t\tleft: 5px;\n\t\t\t\t\tz-index: 2;\n\t\t\t\t}\n\t\t\t`, 'disable_gifs');\n\n\t\t\treturn;\n\t\t}\n\n\t\tXKit.tools.init_css(\"disable_gifs\");\n\t\tif ($(\"#posts\").length > 0) {\n\t\t\t$(document).on('click', '.disable_gifs_button', XKit.extensions.disable_gifs.on_click);\n\t\t\t//$(document).on('click','.xkit-disable-gifs-canvas-thumbnail', XKit.extensions.disable_gifs.toggle_enlarge);\n\n\t\t\tXKit.interface.create_control_button(\"disable_gifs_button\", this.button_icon, \"Play Gif\", \"\", this.on_icon);\n\t\t\tXKit.post_listener.add(\"disable_gifs\", XKit.extensions.disable_gifs.do);\n\t\t\tXKit.extensions.disable_gifs.do();\n\t\t}\n\n\t},\n\n\treact_do: function() {\n\t\tconst {react_draw} = XKit.extensions.disable_gifs;\n\n\t\t$('figure img[srcset*=\".gif\"]:not(.xkit-disabled-gif)').each(function() {\n\t\t\t$(this).addClass('xkit-disabled-gif');\n\n\t\t\tif (this.complete && this.currentSrc) {\n\t\t\t\treact_draw(this);\n\t\t\t} else {\n\t\t\t\tthis.onload = function() { react_draw(this); };\n\t\t\t}\n\t\t});\n\t},\n\n\treact_draw: function(gif) {\n\t\tconst image = new Image();\n\t\timage.src = gif.currentSrc;\n\t\timage.onload = () => {\n\t\t\tconst canvas = document.createElement('canvas');\n\t\t\tcanvas.width = image.naturalWidth;\n\t\t\tcanvas.height = image.naturalHeight;\n\t\t\tcanvas.className = gif.className;\n\t\t\tcanvas.classList.remove('xkit-disabled-gif');\n\t\t\tcanvas.classList.add('xkit-paused-gif');\n\t\t\tcanvas.style.zIndex = '1';\n\t\t\tcanvas.getContext('2d').drawImage(image, 0, 0);\n\n\t\t\tconst label = document.createElement('p');\n\t\t\tlabel.innerText = 'GIF';\n\t\t\tlabel.className = 'xkit-gif-label';\n\n\t\t\tgif.parentNode.appendChild(canvas);\n\t\t\tgif.parentNode.appendChild(label);\n\t\t};\n\t},\n\n\tredraw_canvases: function(obj) {\n\n\t\t$(obj).find(\".xkit-disable-gifs-canvas-container\").each(function() {\n\n\t\t\tvar image = new Image();\n\t\t\timage.src = $(this).attr('data-url');\n\n\t\t\tvar v_object = $(this).find(\".xkit-disable-gifs-canvas-thumbnail\");\n\n\t\t\timage.onload = (function() {\n\t\t\t\t$(v_object)[0].getContext(\"2d\").drawImage(image, 0, 0);\n\n\t\t\t\tif ($(v_object).hasClass(\"xkit-disable-gifs-for-photoset\")) {return; }\n\n\t\t\t\t$(v_object).click(function() {\n\n\t\t\t\t\t$(this).parentsUntil(\".post_media\").parent().find(\".image_thumbnail\").trigger('click');\n\n\t\t\t\t\t$(this).toggleClass(\"enlarged-canvas\");\n\t\t\t\t\tif ($(this).hasClass(\"enlarged-canvas\")) {\n\t\t\t\t\t\t$(this).css(\"width\", $(this).attr('data-width'));\n\t\t\t\t\t\t$(this).css(\"height\", $(this).attr('data-height'));\n\t\t\t\t\t\t$(this).parent().css(\"width\", $(this).attr('data-width'));\n\t\t\t\t\t\t$(this).parent().css(\"height\", $(this).attr('data-height'));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(this).css(\"width\", $(this).attr('data-width-thumb'));\n\t\t\t\t\t\t$(this).css(\"height\", $(this).attr('data-height-thumb'));\n\t\t\t\t\t\t$(this).parent().css(\"width\", $(this).attr('data-width-thumb'));\n\t\t\t\t\t\t$(this).parent().css(\"height\", $(this).attr('data-height-thumb'));\n\t\t\t\t\t}\n\n\t\t\t\t});\n\n\t\t\t});\n\n\n\n\t\t});\n\n\t},\n\n\treturn_as_jpg_photoset: function(url, width, height, post_id, obj, post_obj, row_container, box_container, img_id) {\n\n\t\tconsole.log(\"return_as_jpg_photoset for \" + url + \" | height = \" + height + \" | width = \" + width);\n\n\t\tif (parseInt(height) === 0) {\n\t\t\theight = $(row_container).height();\n\t\t}\n\n\t\tvar m_canvas_html = \"\";\n\n\t\t$(box_container).append(m_canvas_html);\n\n\t\t$(\"#xkit-disable-gifs-canvas-for-\" + post_id + \"___\" + img_id).attr(\"width\", width);\n\t\t$(\"#xkit-disable-gifs-canvas-for-\" + post_id + \"___\" + img_id).attr(\"height\", height);\n\n\t\tvar image = new Image();\n\t\timage.src = url;\n\n\t\timage.onload = (function() {\n\n\t\t\tconsole.log(\"return_as_jpg for \" + url + \" ---> Complete loading image.\");\n\n\t\t\t$(\"#xkit-disable-gifs-canvas-for-\" + post_id + \"___\" + img_id)[0].getContext(\"2d\").drawImage(image, 0, 0, width, height);\n\t\t\t//var image_src = $(\"#xkit-disable-gifs-canvas-for-\" + post_id)[0].toDataURL(\"image/jpg\");\n\n\t\t});\n\n\t},\n\n\treturn_as_jpg: function(url, width, height, post_id, obj, post_obj, photoset_mode) {\n\n\t\tconsole.log(\"return_as_jpg for \" + url);\n\n\t\tvar m_canvas_html = \"\";\n\n\t\tif ($(post_obj).find(\".photo_info\").length > 0) {\n\t\t\t$(post_obj).find(\".photo_info\").before(m_canvas_html);\n\t\t} else {\n\t\t\t$(post_obj).find(\".post_media\").append(m_canvas_html);\n\t\t}\n\t\t$(\"#xkit-disable-gifs-canvas-for-\" + post_id).attr(\"width\", width);\n\t\t$(\"#xkit-disable-gifs-canvas-for-\" + post_id).attr(\"height\", height);\n\n\t\t$(\"#xkit-disable-gifs-canvas-container-for-\" + post_id).css(\"width\", width + \"px\");\n\t\t$(\"#xkit-disable-gifs-canvas-container-for-\" + post_id).css(\"height\", height + \"px\");\n\n\t\tvar image = new Image();\n\t\timage.src = url;\n\n\t\timage.onload = (function() {\n\n\t\t\tconsole.log(\"return_as_jpg for \" + url + \" ---> Complete loading image.\");\n\n\t\t\t$(\"#xkit-disable-gifs-canvas-for-\" + post_id)[0].getContext(\"2d\").drawImage(image, 0, 0, width, height);\n\t\t\t//var image_src = $(\"#xkit-disable-gifs-canvas-for-\" + post_id)[0].toDataURL(\"image/jpg\");\n\n\t\t\tvar m_width = $(obj).attr('data-width');\n\t\t\tvar m_height = $(obj).attr('data-height');\n\n\t\t\t$(\"#xkit-disable-gifs-canvas-for-\" + post_id).attr('data-height', m_height);\n\t\t\t$(\"#xkit-disable-gifs-canvas-for-\" + post_id).attr('data-width', m_width);\n\n\t\t\t$(\"#xkit-disable-gifs-canvas-for-\" + post_id).attr('data-height-thumb', height);\n\t\t\t$(\"#xkit-disable-gifs-canvas-for-\" + post_id).attr('data-width-thumb', width);\n\n\t\t\tif (!photoset_mode) {\n\n\t\t\t\t$(\"#xkit-disable-gifs-canvas-for-\" + post_id).click(function() {\n\n\t\t\t\t\t$(this).parentsUntil(\".post_media\").parent().find(\".image_thumbnail\").trigger('click');\n\n\t\t\t\t\t$(this).toggleClass(\"enlarged-canvas\");\n\t\t\t\t\tif ($(this).hasClass(\"enlarged-canvas\")) {\n\t\t\t\t\t\t$(this).css(\"width\", $(this).attr('data-width'));\n\t\t\t\t\t\t$(this).css(\"height\", $(this).attr('data-height'));\n\t\t\t\t\t\t$(this).parent().css(\"width\", $(this).attr('data-width'));\n\t\t\t\t\t\t$(this).parent().css(\"height\", $(this).attr('data-height'));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(this).css(\"width\", $(this).attr('data-width-thumb'));\n\t\t\t\t\t\t$(this).css(\"height\", $(this).attr('data-height-thumb'));\n\t\t\t\t\t\t$(this).parent().css(\"width\", $(this).attr('data-width-thumb'));\n\t\t\t\t\t\t$(this).parent().css(\"height\", $(this).attr('data-height-thumb'));\n\t\t\t\t\t}\n\n\t\t\t\t});\n\n\t\t\t} else {\n\n\n\n\t\t\t}\n\n\t\t});\n\n\t},\n\n\tcheck_if_animated: function(obj) {\n\n\t\ttry {\n\n\t\t\tvar m_post = XKit.interface.post($(obj));\n\t\t\tif (m_post.animated === true) { return true; }\n\n\t\t\tif ($(obj).find(\".image_thumbnail\").length > 0) {\n\t\t\t\treturn ($(obj).find(\".image_thumbnail\").attr('src').indexOf(\".gif\") !== -1);\n\t\t\t} else {\n\t\t\t\tif ($(obj).find(\".image\").length > 0) {\n\t\t\t\t\treturn ($(obj).find(\".image\").attr('src').indexOf(\".gif\") !== -1);\n\t\t\t\t} else {\n\t\t\t\t\tif ($(obj).find(\".photoset_photo\").length > 0) {\n\t\t\t\t\t\t// do something here?\n\t\t\t\t\t\tif (typeof $(obj).find(\".photoset_photo\").attr('src') !== \"undefined\") {\n\t\t\t\t\t\t\treturn ($(obj).find(\".photoset_photo\").attr('src').indexOf(\".gif\") !== -1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn ($(obj).find(\".photoset_photo\").attr('href').indexOf(\".gif\") !== -1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t} catch (e) {\n\n\t\t\tconsole.log(\"[!!!!!!]check_if_animated --> \" + e.message);\n\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tdo: function() {\n\n\t\tvar posts = XKit.interface.get_posts(\"disable-gifs-checked\");\n\n\t\t$(posts).each(function() {\n\n\t\t\t$(this).addClass(\"disable-gifs-checked\");\n\n\t\t\tif ($(this).hasClass(\"xkit-dont-run-extensions\")) { return; }\n\n\t\t\tvar m_post = XKit.interface.post($(this));\n\t\t\t// if (m_post.animated !== true) { return; }\n\n\t\t\tif (XKit.extensions.disable_gifs.check_if_animated($(this)) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (XKit.extensions.disable_gifs.preferences.hide_completely.value === true) {\n\t\t\t\t$(this).addClass(\"xkit-disable-gifs-completely\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ($(this).find(\".image_thumbnail\").length > 0) {\n\t\t\t\t$(this).find(\".image_thumbnail\").css(\"display\", \"none\");\n\t\t\t\tXKit.extensions.disable_gifs.return_as_jpg($(this).find(\".image_thumbnail\").attr('src'), $(this).find(\".image_thumbnail\").attr('width'), $(this).find(\".image_thumbnail\").attr('height'), m_post.id, $(this).find(\".image_thumbnail\"), this);\n\t\t\t} else {\n\t\t\t\tif ($(this).find(\".image\").length > 0) {\n\t\t\t\t\t$(this).find(\".image\").css(\"display\", \"none\");\n\t\t\t\t\tXKit.extensions.disable_gifs.return_as_jpg($(this).find(\".image\").attr('src'), $(this).find(\".image\").attr('width'), $(this).find(\".image\").attr('height'), m_post.id, $(this).find(\".image\"), this);\n\t\t\t\t} else {\n\t\t\t\t\tif ($(this).find(\".photoset_photo\").length > 0) {\n\t\t\t\t\t\t// do something here?\n\t\t\t\t\t\tvar img_id = 0;\n\t\t\t\t\t\tvar m_parent = $(this);\n\t\t\t\t\t\t$(this).find(\".photoset_photo\").each(function() {\n\t\t\t\t\t\t\t$(this).find(\"img\").css(\"display\", \"none\");\n\t\t\t\t\t\t\timg_id++;\n\t\t\t\t\t\t\tXKit.extensions.disable_gifs.return_as_jpg_photoset($(this).find(\"img\").attr('src'), $(this).find(\"img\").css('width').replace(\"px\", \"\"), $(this).find(\"img\").css('height').replace(\"px\", \"\"), m_post.id, $(this), m_parent, $(this).parent(), $(this), img_id, \"es\");\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar this_id = m_post.root_id;\n\t\t\tXKit.interface.add_control_button(this, \"disable_gifs_button\", \"data-root_id=\\\"\" + this_id + \"\\\"\");\n\n\t\t});\n\n\t},\n\n\ton_click: function(e) {\n\n\t\tvar obj = e.target || e.srcElement;\n\t\tvar parent = $(obj).parentsUntil(\"#posts\");\n\n\t\t$(parent).toggleClass(\"xkit-disable-gifs-playing\");\n\n\n\t\tif ($(parent).hasClass(\"xkit-disable-gifs-playing\")) {\n\t\t\tXKit.interface.completed_control_button(obj, true);\n\t\t\t$(parent).find(\".image, .image_thumbnail, .photoset_photo img\").css(\"display\", \"block\");\n\t\t\t$(parent).find(\".xkit-disable-gifs-canvas-container\").css(\"display\", \"none\");\n\t\t} else {\n\t\t\tXKit.interface.completed_control_button(obj, false);\n\t\t\t$(parent).find(\".image, .image_thumbnail, .photoset_photo img\").css(\"display\", \"none\");\n\t\t\t$(parent).find(\".xkit-disable-gifs-canvas-container\").css(\"display\", \"block\");\n\t\t}\n\n\t},\n\n\tdestroy: function() {\n\t\t$('.xkit-paused-gif, .xkit-gif-label').remove();\n\t\t$('.xkit-disabled-gif').removeClass('xkit-disabled-gif');\n\t\tXKit.tools.remove_css(\"disable_gifs\");\n\t\tthis.running = false;\n\t}\n\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpGNzdGMTE3NDA3MjA2ODExODA4MzkyMjM2MzU5MTQ4NCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoyNEVGRjI5NzNBQkYxMUUzOEU0MkZBNUQ5QjU5M0FBOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyNEVGRjI5NjNBQkYxMUUzOEU0MkZBNUQ5QjU5M0FBOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZCN0YxMTc0MDcyMDY4MTE4MDgzOTIyMzYzNTkxNDg0IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkY3N0YxMTc0MDcyMDY4MTE4MDgzOTIyMzYzNTkxNDg0Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Uek0cwAAAPtJREFUeNpi/L6agaaAiYFh1IIBtoCFgXHUB+RYwBH4nxjNP9Yz0tgHjMT4AI8DN+A0gCPgPzXigJEaPmDErQiP1M9NjPgVkOYDdl+iAuTnZkZqBxER6kmw4OdWnErZvf/jsoAJJIqJ4BZg4wKNYxRwwqceCTGBCgtMBHGX138gQpQmSLJs1nsZBdzQ1GM1Cq8P0AIKVZbNaicxPsAeBz93MWK3AAn8OZ+O0ylkFhVIKv9cyPj7ZhZxFjCxEl20Q1X+3MuGzMVUgOYDASLNZ3f+RciLAliLCm5qFf1YjWL8eUCD1hUOK60tYKe1BWyjFhCo0ZhYhnYkAwQYAB9LJMlalcSTAAAAAElFTkSuQmCC","css":".xkit-disable-gifs-canvas-thumbnail {\n\tmax-width: 100%;\n\tposition: relative;\n}\n\n.post.post_full.is_photo { visibility: hidden !important; }\n.post.disable-gifs-checked.post_full.is_photo { visibility: visible !important; }\n\n.post.disable-gifs-checked.post_full.is_photo.xkit-disable-gifs-completely { display: none !important; }\n\n.xkit-disable-gifs-completely { display: none !important; }\n\n.xkit-disable-gifs-canvas-container {\n\tposition: relative;\n}\n\n.xkit-disable-gifs-canvas-thumbnail.enlarged-canvas {\n\twidth: 100%;\n}\n\n.xkit-disable-gifs-indicator {\n\tposition: absolute;\n\ttop: 50%; left: 50%;\n\tmargin-left: -19px;\n\tmargin-top: -19px;\n\tz-index: 10;\n\tpointer-events: none;\n}\n","title":"Disable Gifs","description":"Stops GIFs on dashboard","developer":"new-xkit","version":"1.0.0","details":"This is a very early preview version of an extension that allows you to stop the GIFs from playing on your dashboard. If you still would like to view them, you can click on the Play button on the post. Please note that for now, this extension can't stop GIFs added to text posts.","frame":"false","beta":"false","slow":"true"}
\ No newline at end of file
diff --git a/Extensions/dist/disable_search.json b/Extensions/dist/disable_search.json
new file mode 100644
index 000000000..ef5d67ff5
--- /dev/null
+++ b/Extensions/dist/disable_search.json
@@ -0,0 +1 @@
+{"id":"disable_search","script":"//* TITLE Classic Search **//\n//* VERSION 2.0.2 **//\n//* DESCRIPTION Get the old search back **//\n//* DETAILS This is a very simple extension that simply redirects your search requests to the old Tumblr tag search pages. Note that features of the new search page, such as multiple tag search will not work when this extension is enabled. **//\n//* DEVELOPER new-xkit **//\n//* FRAME false **//\n//* BETA false **//\n\nXKit.extensions.disable_search = {\n\n\trunning: false,\n\n\tpreferences: {\n\t\t\"sep0\": {\n\t\t\ttext: \"Search Results\",\n\t\t\ttype: \"separator\",\n\t\t},\n\t\t\"open_in_new_tab\": {\n\t\t\ttext: \"Open search results in a new tab\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t}\n\t},\n\n\n\trun: function() {\n\n\t\tthis.running = true;\n\n\t\tif (!XKit.interface.is_tumblr_page()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (XKit.page.react) {\n\t\t\tconst $search = $('form[role=\"search\"][action=\"/search\"]');\n\t\t\tconst $input = $search.find('input');\n\t\t\tconst $tagged = $search.clone();\n\n\t\t\t$search.hide();\n\t\t\t$search.after($tagged);\n\n\t\t\t$input.before($input.clone());\n\n\t\t\t$tagged.addClass(\"xkit-classic-search\");\n\t\t\t$tagged.find('input').replaceWith($input);\n\t\t\t$tagged.on(\"keydown\", event => event.stopPropagation());\n\t\t\t$tagged.on(\"submit\", event => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\n\t\t\t\tconst query = event.target.querySelector('input').value;\n\t\t\t\tconst address = `//www.tumblr.com/tagged/${query}`;\n\n\t\t\t\tif (XKit.extensions.disable_search.preferences.open_in_new_tab.value) {\n\t\t\t\t\twindow.open(address);\n\t\t\t\t} else {\n\t\t\t\t\tlocation.assign(address);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn;\n\t\t}\n\n\t\t$('#search_form').on('submit', XKit.extensions.disable_search.do);\n\n\t\tvar search_result_click_handler = function(e) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\tif (XKit.extensions.disable_search.preferences.open_in_new_tab.value) {\n\t\t\t\twindow.open(e.currentTarget.href);\n\t\t\t} else {\n\t\t\t\tdocument.location = e.currentTarget.href;\n\t\t\t}\n\t\t};\n\n\t\tvar mo = new MutationObserver(function(mutations) {\n\t\t\tmutations.forEach(function(mutation) {\n\t\t\t\tif (mutation.target.className === 'scrollable_container'\n\t\t\t\t\t&& mutation.addedNodes.length > 0) {\n\t\t\t\t\tfor (var i = 0; i < mutation.addedNodes.length; i++) {\n\t\t\t\t\t\tvar links_to_change = $(mutation.addedNodes[i]).find('.search_typeahead');\n\t\t\t\t\t\tfor (var j = 0; j < links_to_change.length; j++) {\n\t\t\t\t\t\t\t$(links_to_change[j]).off('click');\n\t\t\t\t\t\t\t$(links_to_change[j]).on('click', search_result_click_handler);\n\t\t\t\t\t\t\t$(links_to_change[j]).attr('href', $(links_to_change[j]).attr('href')\n\t\t\t\t\t\t\t\t.replace('/search/', '/tagged/'));\n\t\t\t\t\t\t\tif (XKit.extensions.disable_search.preferences.open_in_new_tab.value) {\n\t\t\t\t\t\t\t\t$(links_to_change[j]).attr('target', '_blank');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tmo.observe($('#search_results_container')[0], {childList: true, subtree: true});\n\n\t},\n\n\tdo: function(e) {\n\n\t\te.preventDefault(); //prevent form from submitting\n\t\tvar query = $(\"#search_query\").val();\n\t\tquery = encodeURIComponent(query).replace(/%20/g, '+').replace(/_/g, '-');\n\n\t\tvar url = \"http://www.tumblr.com/tagged/\" + query;\n\n\t\tif (XKit.extensions.disable_search.preferences.open_in_new_tab.value) {\n\t\t\twindow.open(url);\n\t\t} else {\n\t\t\tdocument.location = url;\n\t\t}\n\n\t},\n\n\tdestroy: function() {\n\t\tthis.running = false;\n\t\t$('#search_form').off('submit', XKit.extensions.disable_search.do);\n\t\t$('form[role=\"search\"][action=\"//www.tumblr.com/search\"]').show();\n\t\t$('.xkit-classic-search').remove();\n\t}\n\n};\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpGNzdGMTE3NDA3MjA2ODExODA4MzkyMjM2MzU5MTQ4NCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1NTY1ODZDMDM4QzQxMUUzQTFDQUFDOThEMTlDRUY3OSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1NTY1ODZCRjM4QzQxMUUzQTFDQUFDOThEMTlDRUY3OSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZCN0YxMTc0MDcyMDY4MTE4MDgzOTIyMzYzNTkxNDg0IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkY3N0YxMTc0MDcyMDY4MTE4MDgzOTIyMzYzNTkxNDg0Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+MHc+egAAA7NJREFUeNpi/BrKQFPAxMAwagF+wEJYCTcDs7wDhPn34QGGr6RawIhbzj6ZxSuPSUEPWfDfg0t/tk36c3AukRYwfo3AFnByhmxZC5nkdXFp+/fw8q9p8f8enSfCgkhM0004avcwcPMT0Pr1449ml3+PzhCyIAqVz8XB0XaTUVQOGujXjvzZMeXv2ZUQLrOmO0tQDbOWDdyO7wUS/7/9wJuKmBmQEWtQH9z0X0uqfnbY/n9yjjWkgy1jGZD8/+4eUOTXrCxY/POzxs5FMwENMX6NQ3I+pzDnjDcQ9p9Dy3/NjWJxq2KLbkV20a/ZOX+OTGUN6GQNLIOI/CjW/PfmBm4fMDHAEbMJLEK+ffq9opBJ3gZi+u8NPT87fP/smgVks6VOYeQW/7O7D6gGaoRxMLIhaIiFkRE5eqHJ5s+57Qw/XrLYNoOi4fzOP5tKQSnn1hYGbgFGERlGMc3/jw4A1bDYhIMiRsPm7x7caZ2RiRURRPB0+e4pUJxRXgdkwc3jcDV/5sdAVQJF3j2FxwSyIRgZjYkDORHBaCawOJjLxAhXwyhrzsAlwPDm4f+3N0Bq4LpQDEGPAxY4+v/4OswgLTAXFHXMhh5wBewl69mLVzPKGYK4wjJQM75/QjYEDQExwnf/nkETA7OB228eyb8H5rA4JzCrmjNkrfp7YTezZRADJw/D9y//7h5h4JFkMXCH5pU7pxhwBxEw6bDD0b8rOxm+f4ZIsMZN/P/h0e8lVUATmfVc2OI6QTZ9//JrcQXDz88sIc0MXLwQlf8v70Y2BA2BPQIHPz/9ObCYxROUj4CG/o+Z9GdZ0b+7J5hULBmFpP//+Pzv0s7/7x6weFWwWARBo/3khv8fHqMYglZUfC9URxHg4GfLWsQkAxX89+Tm38NL/17eyfDjI1AKaBOzXQyziglC/ffPP6cm/n92BbcFxdroQpLa7FlzQcFNJPj+5ee05P/PrxJORdC09PLmjw6vv3fP4zcUwebkATqIUVofaypi/F5ugjMBKJkxW4cza9shC/69eujf9UN/r+5nS53BJKWK4o/ZWf+fXUcPjx9VloQDQVCKUUDy/48vDM9vIjmcjzVpCpOUCoodc3NR1IAsqLUlv0bn4GVNnMQkqYwQ+fH1Z5snWj5gIR/9/v57UfG/53cRAXjjKJoaJjy5nCj069vvJWX/X9wDmX5xz5/NPeiR/KPViwqtH3YeRgnl/w8vYitNmVmpYMGfn/+fXMNqFDikaNuyY2SmsQUsbDS1ACDAAHFXUgQGOTnxAAAAAElFTkSuQmCC","title":"Classic Search","description":"Get the old search back","developer":"new-xkit","version":"2.0.2","details":"This is a very simple extension that simply redirects your search requests to the old Tumblr tag search pages. Note that features of the new search page, such as multiple tag search will not work when this extension is enabled.","frame":"false","beta":"false","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/dont_stretch_photosets.json b/Extensions/dist/dont_stretch_photosets.json
new file mode 100644
index 000000000..0ba0f8285
--- /dev/null
+++ b/Extensions/dist/dont_stretch_photosets.json
@@ -0,0 +1 @@
+{"id":"dont_stretch_photosets","script":"//* TITLE Don't stretch photosets **//\n//* VERSION 1.0.1 **//\n//* DESCRIPTION Don't allow images in photosets to be stretched past their “natural” length. **//\n//* DEVELOPER 9999years **//\n//* FRAME false **//\n//* BETA false **//\n\nXKit.extensions.dont_stretch_photosets = new Object({\n\trunning: false,\n\n\trun: function() {\n\t\tthis.running = true;\n\t\tXKit.tools.init_css(\"dont_stretch_photosets\");\n\t},\n\n\tdestroy: function() {\n\t\tXKit.tools.remove_css(\"dont_stretch_photosets\");\n\t\tthis.running = false;\n\t}\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,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\n","css":".post_full.is_photo .post_media_photo,\n.post_full.is_photoset .photoset .photoset_row,\n.post_full.is_photo .photoset .photoset_row,\n.post_full.is_photoset .photoset .photoset_row img {\n width: initial !important;\n height: initial !important;\n max-width: 100% !important;\n margin-left: auto !important;\n margin-right: auto !important;\n}\n","title":"Don't stretch photosets","description":"Don't allow images in photosets to be stretched past their “natural” length.","developer":"9999years","version":"1.0.1","frame":"false","beta":"false","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/drafts_plus.json b/Extensions/dist/drafts_plus.json
new file mode 100644
index 000000000..a0c8ff356
--- /dev/null
+++ b/Extensions/dist/drafts_plus.json
@@ -0,0 +1 @@
+{"id":"drafts_plus","script":"//* TITLE Drafts+ **//\n//* VERSION 0.2.7 **//\n//* DESCRIPTION Enhancements for Drafts page **//\n//* DEVELOPER STUDIOXENIX **//\n//* FRAME false **//\n//* BETA false **//\n\nXKit.extensions.drafts_plus = new Object({\n\n\trunning: false,\n\n\trun: function() {\n\t\tthis.running = true;\n\n\t\tif (XKit.interface.where().drafts !== true) {return; }\n\n\t\tXKit.tools.init_css(\"drafts_plus\");\n\n\t\tXKit.interface.sidebar.add({\n\t\t\tid: \"drafts_plus_sidebar\",\n\t\t\ttitle: \"Drafts Tools\",\n\t\t\titems: [\n\t\t\t\t{ id: \"drafts_plus_mass_edit_button\", text: \"Mass Edit Mode\" },\n\t\t\t\t{ id: \"xshrinkposts_button\", text: \"Shrink Posts\", count: \"off\" }\n\t\t\t]\n\t\t});\n\n\t\t$(\"#drafts_plus_mass_edit_button\").click(function() {\n\n\t\t\tif (!$(this).parent().hasClass(\"xkit-selected\")) {\n\n\t\t\t\t$(this).parent().addClass(\"xkit-selected\");\n\t\t\t\t$(this).parent().addClass(\"selected\");\n\t\t\t\tXKit.extensions.drafts_plus.start_mass_editor();\n\n\t\t\t} else {\n\n\t\t\t\t$(this).parent().removeClass(\"xkit-selected\");\n\t\t\t\t$(this).parent().removeClass(\"selected\");\n\t\t\t\tXKit.extensions.drafts_plus.stop_mass_editor();\n\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\n\t\t$(\"#xshrinkposts_button\").click(function() {\n\n\t\t\t$(this).toggleClass(\"xkit-queue-option-button-on\");\n\n\t\t\tif ($(this).hasClass(\"xkit-queue-option-button-on\")) {\n\n\t\t\t\t$(this).find(\".count\").html(\"on\");\n\n\t\t\t\tXKit.storage.set(\"shuffle_queue\", \"shrink_posts\", \"true\");\n\n\t\t\t\tXKit.tools.add_css(\" .post_header { display: none; } .post .post_content_inner, .post .post_media { height: 70px !important; overflow: hidden !important; } .post .post_content { pointer-events: none !important; height: 70px !important; overflow: hidden !important; border: 1px dashed rgb(200,200,200); } \", \"shuffle_queue_mini_posts\");\n\n\t\t\t} else {\n\n\t\t\t\t$(this).find(\".count\").html(\"off\");\n\n\t\t\t\tXKit.storage.set(\"shuffle_queue\", \"shrink_posts\", \"false\");\n\n\t\t\t\tXKit.tools.remove_css(\"shuffle_queue_mini_posts\");\n\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\n\t},\n\n\tstart_mass_editor: function() {\n\n\t\tXKit.tools.add_css(\" #posts { padding: 0 !important; margin: 0 !important; } .xtimestamp { display: none; } .post_controls { display: none; }\" +\n\t\t\t\t\" .post:not(.radar):last-child { display: block; } #left_column { min-height: 120%; } \" +\n\t\t\t\t\" .post_full.is_note .avatar, #new_post_hidden { display: none; } \" +\n\t\t\t\t\" #posts.posts>.post_container { margin-bottom: 0; } \" +\n\t\t\t\t\" .post .post_source, .post.is_video, .post.is_audio { display: none; } \" +\n\t\t\t\t\" .post .post_footer, .post .post_permalink { display: none !important; } \" +\n\t\t\t\t\" .post .tumblr_video_container, .post .tumblr_video_container * { max-width: 164px !important; max-height: 164px !important; } \" +\n\t\t\t\t\" .post .photoset_row { max-width: 164px; height: auto; } \" +\n\t\t\t\t\" .post .post_content img { max-height: 164px; max-width: 164px; height: auto; } \" +\n\t\t\t\t\" .post { -moz-user-select: none; user-select: none; -webkit-user-select: none; float: left !important; width: 200px !important; height: 200px !important; \" +\n\t\t\t\t\" opacity: 0.53; \" +\n\t\t\t\t\" display: inline-block !important; clear: none !important; overflow: hidden !important; \" +\n\t\t\t\t\" margin: 0px 4px 8px 4px !important; } \" +\n\t\t\t\t\" .fan_mail { display: none !important; } \" +\n\t\t\t\t\" #xkit_delete_selected:hover { background: rgba(255,255,255,0.12); cursor: pointer; } \" +\n\t\t\t\t\" #xkit_delete_selected.disabled { opacity: 0.5; cursor: default; \" +\n\t\t\t\t\" background: rgba(255,255,255,0.08) !important; top: 0 !important; } \" +\n\t\t\t\t\" #xkit_delete_selected:active { background: rgba(0,0,0,0.12); \" +\n\t\t\t\t\" box-shadow: inset 0px 1px 2px rgba(0,0,0,0.43); position: relative; top: 1px; } \" +\n\t\t\t\t\" #xkit_delete_selected { border: 1px solid rgba(0,0,0,0.32); border-radius: 6px; \" +\n\t\t\t\t\" box-shadow: inset 0px 1px 0px rgba(255,255,255,0.12), 0px 1px 0px rgba(255,255,255,0.12); \" +\n\t\t\t\t\" padding: 5px 15px; background: rgba(255,255,255,0.08); display: inline-block; margin-top: 5px;} \" +\n\t\t\t\t\" .post:not(.radar) * { pointer-events: none; cursor: default; } \" +\n\t\t\t\t\" .post.xpost-selected { opacity: 1; } \" +\n\t\t\t\t\" .post.xpost-working { animation: xpost-working-ani 1s infinite; \" +\n\t\t\t\t\" -webkit-animation: xpost-working-ani 1s infinite; \" +\n\t\t\t\t\" -webkit-animation: xpost-working-ani 1s infinite; } \" +\n\t\t\t\t\" @-moz-keyframes xpost-working-ani { from { opacity: 1; } 50% { opacity: 0.32; } to { opacity: 1; } } \" +\n\t\t\t\t\" @-webkit-keyframes xpost-working-ani { from { opacity: 1; } 50% { opacity: 0.32; } to { opacity: 1; } } \", \"drafts_plus_mass_editor\");\n\n\t\t$(\"#new_post_buttons\").attr(\"id\", \"new_post_hidden\");\n\n\t\tXKit.tools.add_function(function() {\n\n\t\t\ttry {\n\n\t\t\t\tif (typeof Tumblr === \"undefined\") {\n\t\t\t\t\twindow.top.Tumblr.AutoPaginator.stop();\n\t\t\t\t\twindow.top.Tumblr.Events.trigger(\"DOMEventor:updateRect\");\n\t\t\t\t} else {\n\t\t\t\t\tTumblr.AutoPaginator.stop();\n\t\t\t\t\tTumblr.Events.trigger(\"DOMEventor:updateRect\");\n\t\t\t\t}\n\n\t\t\t} catch (e) {\n\n\t\t\t\tconsole.log(\"Drafts Plus ==2==> !!! \" + e.message);\n\n\t\t\t}\n\n\t\t}, true, \"\");\n\n\t\t$(window).scroll(XKit.extensions.drafts_plus.scrolled);\n\n\t\tXKit.extensions.drafts_plus.add_overlays();\n\t\tXKit.extensions.drafts_plus.load_posts();\n\n\t},\n\n\tscroller_working: false,\n\tcurrent_page: 1,\n\n\tadd_overlays: function() {\n\n\t\tconsole.log(\"drafts_plus -> Adding overlays...\");\n\n\t\t$(\".posts .post\").not(\".drafts-plus-overlay-done\").not(\".radar\").each(function() {\n\n\t\t\t$(this).addClass(\"drafts-plus-overlay-done\");\n\n\t\t\tvar m_html = \"
\" +\n\t\t\t\t\t\t\"
\" +\n\t\t\t\t\t\t\t\"
\" +\n\t\t\t\t\t\t\t\"
\" +\n\t\t\t\t\t\t\t\"
\" +\n\t\t\t\t\t\t\t\"
\" +\n\t\t\t\t\t\t\"
\" +\n\t\t\t\t\t\"
\";\n\n\t\t\t$(this).append(m_html);\n\n\t\t});\n\n\t\t$(\".xkit-drafts-plus-delete, .xkit-drafts-plus-edit, .xkit-drafts-plus-publish, .xkit-drafts-plus-queue\").unbind(\"click\");\n\n\t\t$(\".xkit-drafts-plus-queue\").bind(\"click\", function() {\n\n\t\t\tvar m_parent = $(this).parentsUntil('.post').parent();\n\n\t\t\t$(m_parent).addClass(\"xpost-working\");\n\n\t\t\tvar post_id = $(m_parent).attr('data-post-id');\n\n\t\t\tvar m_object = {};\n\n\t\t\tm_object.post_id = post_id;\n\t\t\tm_object.form_key = XKit.interface.form_key();\n\t\t\tm_object.queue = \"queue\";\n\n\t\t\tGM_xmlhttpRequest({\n\t\t\t\tmethod: \"POST\",\n\t\t\t\turl: \"http://www.tumblr.com/publish\",\n\t\t\t\theaders: {\n\t\t\t\t\t\"Content-Type\": \"application/x-www-form-urlencoded\"\n\t\t\t\t},\n\t\t\t\tdata: $.param({\"id\": m_object.post_id, \"form_key\" : m_object.form_key, \"queue\":\"queue\"}),\n\t\t\t\tjson: false,\n\t\t\t\tonerror: function(response) {\n\t\t\t\t\tXKit.window.show(\"Can't delete post.\", \"Drafts+ could not perform the requested action. There might be a problem with Tumblr servers, please try again later.\", \"error\", \"
OK
\");\n\t\t\t\t},\n\t\t\t\tonload: function(response) {\n\t\t\t\t\t$(m_parent).fadeOut('slow', function() { $(m_parent).parent().remove(); });\n\t\t\t\t}\n\t\t\t});\n\n\t\t});\n\n\t\t$(\".xkit-drafts-plus-edit\").bind(\"click\", function() {\n\n\t\t\tvar m_parent = $(this).parentsUntil('.post').parent();\n\n\t\t\tvar post_id = $(m_parent).attr('data-post-id');\n\n\t\t\twindow.open(\"http://www.tumblr.com/edit/\" + post_id);\n\n\t\t});\n\n\t\t$(\".xkit-drafts-plus-publish\").bind(\"click\", function() {\n\n\t\t\tvar m_parent = $(this).parentsUntil('.post').parent();\n\n\t\t\t$(m_parent).addClass(\"xpost-working\");\n\n\t\t\tvar post_id = $(m_parent).attr('data-post-id');\n\n\t\t\tvar m_object = {};\n\n\t\t\tm_object.post_id = post_id;\n\t\t\tm_object.form_key = XKit.interface.form_key();\n\t\t\tm_object.queue = \"queue\";\n\n\t\t\tGM_xmlhttpRequest({\n\t\t\t\tmethod: \"POST\",\n\t\t\t\turl: \"http://www.tumblr.com/publish\",\n\t\t\t\theaders: {\n\t\t\t\t\t\"Content-Type\": \"application/x-www-form-urlencoded\"\n\t\t\t\t},\n\t\t\t\tdata: $.param({\"id\": m_object.post_id, \"form_key\" : m_object.form_key}),\n\t\t\t\tjson: false,\n\t\t\t\tonerror: function(response) {\n\t\t\t\t\tXKit.window.show(\"Can't delete post.\", \"Drafts+ could not perform the requested. There might be a problem with Tumblr servers, please try again later.\", \"error\", \"
OK
\");\n\t\t\t\t},\n\t\t\t\tonload: function(response) {\n\t\t\t\t\t$(m_parent).fadeOut('slow', function() { $(m_parent).parent().remove(); });\n\t\t\t\t}\n\t\t\t});\n\n\t\t});\n\n\t\t$(\".xkit-drafts-plus-delete\").bind(\"click\", function() {\n\n\t\t\tvar m_parent = $(this).parentsUntil('.post').parent();\n\n\t\t\t$(m_parent).addClass(\"xpost-working\");\n\n\t\t\tvar post_id = $(m_parent).attr('data-post-id');\n\n\t\t\tvar m_object = {};\n\n\t\t\tvar m_array = document.location.href.split(\"/\");\n\t\t\tvar m_channel_id = m_array[4];\n\n\t\t\tm_object.post_id = post_id;\n\t\t\tm_object.form_key = XKit.interface.form_key();\n\t\t\tm_object.channel_id = m_channel_id;\n\n\t\t\tGM_xmlhttpRequest({\n\t\t\t\tmethod: \"POST\",\n\t\t\t\turl: \"http://www.tumblr.com/svc/post/delete\",\n\t\t\t\theaders: {\n\t\t\t\t\t\"Content-Type\": \"application/x-www-form-urlencoded\",\n\t\t\t\t\t\"X-tumblr-form-key\": XKit.interface.form_key(),\n\t\t\t\t},\n\t\t\t\tdata: $.param({\"post_id\": m_object.post_id, \"channel_id\" : m_object.channel_id }),\n\t\t\t\tjson: false,\n\t\t\t\tonerror: function(response) {\n\t\t\t\t\tXKit.window.show(\"Can't delete post.\", \"Drafts+ could not perform the requested. There might be a problem with Tumblr servers, please try again later.\", \"error\", \"
OK
\");\n\t\t\t\t},\n\t\t\t\tonload: function(response) {\n\t\t\t\t\t$(m_parent).fadeOut('slow', function() { $(m_parent).parent().remove(); });\n\t\t\t\t}\n\t\t\t});\n\n\t\t});\n\n\t},\n\n\tscrolled: function() {\n\n\t\tif ($(window).scrollTop() + $(window).height() == $(document).height()) {\n\n\t\t\tXKit.extensions.drafts_plus.load_posts();\n\n\t\t}\n\n\t},\n\n\tload_posts: function() {\n\n\t\tfunction __trigger_load() {\n\n\t\t\ttry {\n\n\t\t\t\tif (typeof Tumblr === \"undefined\") {\n\t\t\t\t\twindow.top.Tumblr.Events.trigger(\"posts:load\");\n\t\t\t\t\twindow.top.Tumblr.AudioPlayer.update_all();\n\t\t\t\t\twindow.top.Tumblr.Events.trigger(\"DOMEventor:updateRect\");\n\t\t\t\t} else {\n\t\t\t\t\tTumblr.Events.trigger(\"posts:load\");\n\t\t\t\t\tTumblr.AudioPlayer.update_all();\n\t\t\t\t\tTumblr.Events.trigger(\"DOMEventor:updateRect\");\n\t\t\t\t}\n\n\t\t\t} catch (e) {\n\n\t\t\t\tconsole.log(\"Drafts Plus ==2==> !!! \" + e.message);\n\n\t\t\t}\n\n\n\t\t}\n\n\t\tif (XKit.extensions.drafts_plus.scroller_working === true) { return; }\n\n\t\tXKit.extensions.drafts_plus.scroller_working = true;\n\t\tXKit.extensions.drafts_plus.current_page++;\n\n\t\tvar last_id = $(\"#posts\").find(\"li.post_container\").last().find(\".post\").attr('data-post-id');\n\n\t\tvar m_url = document.location.href.replace(\"#\", \"\");\n\n\t\t// http://www.tumblr.com/blog/xenix/drafts/after/\n\n\t\tm_url = m_url + \"/after/\" + last_id;\n\n\t\tGM_xmlhttpRequest({\n\t\t\tmethod: \"GET\",\n\t\t\turl: m_url,\n\t\t\tonerror: function(response) {\n\t\t\t\tXKit.extensions.drafts_plus.scroller_working = false;\n\t\t\t\t$(\"#auto_pagination_loader_failure\").css(\"display\", \"block\");\n\t\t\t\t$(\"#auto_pagination_loader_loading\").css(\"display\", \"none\");\n\n\t\t\t},\n\t\t\tonload: function(response) {\n\t\t\t\tXKit.extensions.drafts_plus.scroller_working = false;\n\t\t\t\tvar new_posts = $(\"#posts\", response.responseText).html();\n\t\t\t\t// console.log(new_posts);\n\t\t\t\ttry {\n\t\t\t\t\t$(\"ol#posts\").append(new_posts);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.log(\"Drafts Plus ==3==> !!! \" + e.message);\n\t\t\t\t}\n\t\t\t\t$(\"#auto_pagination_loader_failure\").css(\"display\", \"none\");\n\t\t\t\t$(\"#auto_pagination_loader_loading\").css(\"display\", \"block\");\n\n\t\t\t\tXKit.extensions.drafts_plus.add_overlays();\n\t\t\t\ttry {\n\t\t\t\t\tXKit.tools.add_function(__trigger_load, true, \"\");\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.log(\"Drafts+: \" + e.message);\n\t\t\t\t}\n\n\t\t\t}\n\t\t});\n\n\t},\n\n\tstop_mass_editor: function() {\n\n\t\tXKit.tools.remove_css(\"drafts_plus_mass_editor\");\n\t\t$(\".posts .post\").removeClass(\"drafts-plus-overlay-done\");\n\t\t$(\".xkit-drafts-plus-overlay\").remove();\n\n\t},\n\n\tdestroy: function() {\n\t\tthis.running = false;\n\t\tXKit.interface.sidebar.remove(\"drafts_plus_sidebar\");\n\t\tXKit.extensions.drafts_plus.stop_mass_editor();\n\t}\n\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpGNzdGMTE3NDA3MjA2ODExOEE2REFBMEI0RDEyNThDRSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo2MjRFNUEwRTExOTYxMUUzODA1QkYzQThDQUE5QTlCQiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2MjRFNUEwRDExOTYxMUUzODA1QkYzQThDQUE5QTlCQiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkY3N0YxMTc0MDcyMDY4MTE4QTZEQUEwQjREMTI1OENFIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkY3N0YxMTc0MDcyMDY4MTE4QTZEQUEwQjREMTI1OENFIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+LRi/0QAAAxRJREFUeNqcls1qFEEQx6tnZmc/xllnRrKJqEGJoqIJgooHwRcQBQ968AEEX0AQ8RQ1eNC7r+HFa0B9Cj0oQi5Cvtysm53+sKfno7une3azFsPQmXR+VfXvquog8g6AQmZILPiblevcGEhD+hcEmlEwzSug6q//g25D852McQcVHRm7GTTa0egkc1DbQRvQavhmxsxCp+Lx5AFMoU8XiukfSzoPn9A8A9ScqaqGIxBMyYPpLsWPKp1oZ2DGjow8mP7dOLYavczAWl7P61/whi0/5W9NOqY87SkVaVj3BZJcOpvOF87silQspSzzYcs4p2s+WJ7BTOlNHy/rO3IiFcR8zRcYsseZi271wYl5yRMkHqdAY6GSZ6c3uMGv662R0zm0Eh0TwGlB1x3Mopt1dbgu6YXoE4nmT0pqGZiNOtWoI480I07EWqFjrZPBGNSzTKWTiUTLDHDVyTndOWrsavFgHZ3S7Bg4mmdwEF/16vS5HKRFXRZ0UshSvAH2Lz5x5CCb15iiOCdi8abSx97yo/biBUdGPVf4YmcReIVWjvcgvkauPI6iyJGDd0565gAJOpX0VKg0bkej68+iOInj2LFfBnQ2PTsDo+r52R62/P0br8ITi0mS9Ho9RN4q+iCLg2wMVK00KdsVip5KS3GyBYFfe+Df+xAurSwsLHB9Wq2WU0xdZm9gO53W6VjQv2/D04/QP3l+MBhwuudlJYrIRuP1JEdYPt8nypgsHaRldX76Bu+/ooOJVHBra0v8X2TeiDY6L3mTnhfozl9Y34TPP+wTRh92TL+eqBxkxUnWpCfw5Se82US/R40lWErEtMuP1OjVBFYc/Akv7Z19CKdu9ft9rvja2pqqjC2DGp1pdNmxFLaT27vLD5zB5WNBwOlBEHS73aYMPDV8Vt6rlT6cWN3gIx/thHf3l++78ZnjQRCGIS/zTqfDqwUh1OzAoFd3E1+MXNjt3NmJbo6TVQgG7XY76XZ5yBzt+76KrilTlyinjx0YuqeH/srYjYbBuWF/FfeW2sLCToe/fWGc67rulKhV+yfAAHmTz1TEQ6ZcAAAAAElFTkSuQmCC","css":".xkit-drafts-plus-overlay {\n\tposition: absolute;\n\ttop: 0; left: 0;\n\twidth: 100%;\n\theight: 100%;\n\tdisplay: none;\n\tbackground: rgba(0,0,0,0.75);\n\tz-index: 1000000;\n\tborder-radius: 4px;\n}\n\n.post:hover {\n\topacity: 1;\n}\n\n.post:hover .xkit-drafts-plus-overlay {\n\tdisplay: block;\n}\n\n.post.xpost-working:hover .xkit-drafts-plus-overlay { display: none; }\n\n.post:hover .xkit-drafts-plus-overlay .xkit-drafts-plus-overlay-inner {\n\n\twidth: 100%;\n\theight: 50px;\n\tposition: absolute;\n\ttop: 50%; margin-top: -25px;\n\ttext-align: center;\n\tz-index: 2000000;\n\n}\n\n.xkit-drafts-plus-delete,\n.xkit-drafts-plus-edit,\n.xkit-drafts-plus-queue,\n.xkit-drafts-plus-publish {\n\n\tdisplay: inline-block;\n\twidth: 36px; height: 36px;\n\tbackground: transparent 50% 50% no-repeat;\n\topacity: 0.6; margin-top: 8px;\n\tcursor: pointer;\n\tpointer-events: auto !important;\n\n}\n\n.xkit-drafts-plus-delete:hover,\n.xkit-drafts-plus-edit:hover,\n.xkit-drafts-plus-queue:hover,\n.xkit-drafts-plus-publish:hover {\n\n\tpointer-events: auto !important;\n\topacity: 1;\n\tcursor: pointer !important;\n\n}\n\n.xkit-drafts-plus-delete:active,\n.xkit-drafts-plus-edit:active,\n.xkit-drafts-plus-queue:active,\n.xkit-drafts-plus-publish:active {\n\n\tposition: relative; top: 1;\n\topacity: 0.7;\n\n}\n\n.xkit-drafts-plus-delete {\n\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RURENTI1NzMxMTdEMTFFMzgwNUJGM0E4Q0FBOUE5QkIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RURENTI1NzQxMTdEMTFFMzgwNUJGM0E4Q0FBOUE5QkIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpFREQ1MjU3MTExN0QxMUUzODA1QkYzQThDQUE5QTlCQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFREQ1MjU3MjExN0QxMUUzODA1QkYzQThDQUE5QTlCQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PqXEVHQAAADySURBVHjatFXNCsIwDF7d9CL4BAqexQfw/R/CbuJFNncR/JkexKk1hxRC3GyiLvCxZClfv6YlMc65qAvrRR1ZIlzXdCyjJXb/2CzRKvmlxltUo0UZIl59KTINEdMFB5bbsXhPfKshnrHcgsVzjWJaij7gSOI78St2+SrFY0DRUtMC896yEPEGcCXEpYD4DMhDxE9SDqniVNor/LEmXAmxHPNvZfhErFW8lBJbJbHVKp7ixXgbEv+C+cZSmJZGPwKcyNv17/UGGKD/AMSAGjesJYorbEa8Aw6IH+N3zUlDE0TajDLtaMqExLbpp+lqmL4EGAD0MlIJjK2cGwAAAABJRU5ErkJggg==);\n\n}\n\n.xkit-drafts-plus-edit {\n\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QkUxRjlBOUUxMTkyMTFFMzgwNUJGM0E4Q0FBOUE5QkIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QkUxRjlBOUYxMTkyMTFFMzgwNUJGM0E4Q0FBOUE5QkIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCRTFGOUE5QzExOTIxMUUzODA1QkYzQThDQUE5QTlCQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCRTFGOUE5RDExOTIxMUUzODA1QkYzQThDQUE5QTlCQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PnG3Sl8AAAEZSURBVHjazJW9DgFBFEZNtOgURNReQu0dPALvQoJdGiHolWqtUiQKGiFBTSISMb7hTjIZs8z4iy85zd65Z+/ObmYZ5zz0jbAPiRmogCnwr1eE+E3EcDV+yxkUrsNSMQa64MjtMgZp6g2DnlIT8qIUd7h9BiBKk5ZAziD3pXhPFxIOj++BNdhpcl/U5UIZF+kCZMESHBQ5U/fYVsxoIimdKb1lda2L+JHUl5O6ikVT3VbqIhZ7uiXpXFnvkTT1ijhJtRNYGaRxMHlFnDd8y57y+CNTr424oUmr2p4ae+UhxJXDRE8fbMCQWGt1Y6+N+Fl+K9bPirTjkZmhvl3Qy2vy99IMEotjsE13dolY3wKRoK/ib/95d7kIMACjSoGtFeGvSwAAAABJRU5ErkJggg==);\n\n}\n\n.xkit-drafts-plus-queue {\n\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QkUxRjlBQTIxMTkyMTFFMzgwNUJGM0E4Q0FBOUE5QkIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QkUxRjlBQTMxMTkyMTFFMzgwNUJGM0E4Q0FBOUE5QkIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCRTFGOUFBMDExOTIxMUUzODA1QkYzQThDQUE5QTlCQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCRTFGOUFBMTExOTIxMUUzODA1QkYzQThDQUE5QTlCQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PhfjeQkAAAFHSURBVHja1JW9SgNBFIUzQUFSiq1NqliIPoAYC7NvYOsbWNha+CAigggi+g7ZJv6AglZaaKzsBDEaUGMxfgN3Ydnc2ZkIKXLgK/buzOHuLPeMsdZWxqFqZUwqMzaQwB48QB8G0JVaS9bockeh0IBLG9aFrB3y0EzX4NPG6wOaIeMF6NvR9S57VWMDV5FGT9LlW652Lh5DxskIHbZgGX4L9UQz3lcMBkrtCKbhVnl3qBk/FxZ9S1cHudorzMGu50vuNeNid+4zt+XdljxvwiL8eIx7McaZjqEm3bsjuCk5+y/NuFuy4Q7qsBP4qY+Z31RuCNtQ9wzoElxDLRARbS0rTgObZmEmsOZMywoTmQ8+dXwDko10758j3QiFUFOCJVaukdWYdMtiM40wTX2xaQJX0zpswArMu18CL9CBE0i9t8TE3Xl/AgwAPYhxKV9JlNUAAAAASUVORK5CYII=);\n\n}\n\n.xkit-drafts-plus-publish {\n\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NjI0RTVBMDUxMTk2MTFFMzgwNUJGM0E4Q0FBOUE5QkIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NjI0RTVBMDYxMTk2MTFFMzgwNUJGM0E4Q0FBOUE5QkIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCRTFGOUFBNDExOTIxMUUzODA1QkYzQThDQUE5QTlCQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo2MjRFNUEwNDExOTYxMUUzODA1QkYzQThDQUE5QTlCQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PoXXOcoAAAFPSURBVHjaYvr//z8DLTATA40APoMZgdgNiGcB8XUg/gLEv4D4LlTMFaoGO8DhFQ0gPv6fMDgGVYthBjZDHYD483/iwScgticUxppAvAWIeUgITl4g3gjVizWMQeE1H4i5cRiwH4gv4JDjB+I5KGGO5Hw3Al5WAWJLAmrcsAVFGB7vVgLxHSA+DsTT8aiLxubiezhccR6ImZHUCQHxKxxqr2FzsQwOV6QA8V8k/jsgLsOhVpqYDAICfUB8Fov4AiA+gkWcDZ4SwIkZAkA5SolATgSHHh41oHhQRXfxPioUEfuwBcUqKhi8GpvBe4D4BB5N/wkEw1Eg3ovNYJCmJCD+RIZLP0JTz39cqQJUPPoB8WcSDP0E1XODUHl8EIjNgPgAEYaC1JgD8SGMJISU3LABFyAOBWIbIJaFevUJNA2vgBZM2NMmAYNpUjVRBAACDAAo7rO6+jOXMQAAAABJRU5ErkJggg==);\n\n}\n","title":"Drafts+","description":"Enhancements for Drafts page","developer":"STUDIOXENIX","version":"0.2.7","frame":"false","beta":"false","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/editable_reblogs.json b/Extensions/dist/editable_reblogs.json
new file mode 100644
index 000000000..ef08644d2
--- /dev/null
+++ b/Extensions/dist/editable_reblogs.json
@@ -0,0 +1 @@
+{"id":"editable_reblogs","script":"//* TITLE Editable Reblogs **//\n//* VERSION 3.3.14 **//\n//* DESCRIPTION Restores ability to edit previous reblogs of a post **//\n//* DEVELOPER new-xkit **//\n//* FRAME false **//\n//* BETA false **//\n\nXKit.extensions.editable_reblogs = new Object({\n\n\trunning: false,\n\tstate: undefined,\n\tpost_types: {\n\t\tPUBLISH: 0,\n\t\tQUEUE: 1,\n\t\tDRAFT: 2,\n\t\tPRIVATE: 3,\n\t\tSCHEDULE: 4\n\t},\n\n\tselected_post_type: \"PUBLISH\",\n\tscheduled_date: \"Next Tuesday, 10am\",\n\tpost_date_metadata: null,\n\tpost_slug_metadata: null,\n\n\trun: function() {\n\t\tthis.running = true;\n\n\t\tXKit.interface.post_window_listener.add(\"editable_reblogs\", this.post_window.bind(this));\n\t\tXKit.tools.init_css(\"editable_reblogs\");\n\t\tthis.create_post_button_click_handler = this.make_post.bind(this);\n\n\t\t// DOM nodes containing options disappear before a handler can be run\n\t\tvar record_post_settings_handler = this.record_post_settings.bind(this);\n\t\t$(\"body\").on(\"click\", record_post_settings_handler);\n\n\t\tvar post_setting_keyup_handlers = {};\n\t\t$.each({\"#customUrl_input\": \"post_slug_metadata\", \"#postDate_input\": \"post_date_metadata\"},\n\t\t\tfunction(selector, property) {\n\t\t\t\tpost_setting_keyup_handlers[selector] = function() {\n\t\t\t\t\tXKit.extensions.editable_reblogs[property] = $(this).val();\n\t\t\t\t};\n\n\t\t\t\t$('body').on(\"keyup\", selector, post_setting_keyup_handlers[selector]);\n\t\t\t}\n\t\t);\n\n\t\tthis.teardown_event_handlers = function() {\n\t\t\t$(\"body\").off(\"click\", \".create_post_button\", this.create_post_button_click_handler);\n\t\t\t$(\"body\").off(\"click\", record_post_settings_handler);\n\t\t\t$.each(post_setting_keyup_handlers, function(selector, handler) {\n\t\t\t\t$('body').off(\"keyup\", selector, handler);\n\t\t\t});\n\t\t};\n\t},\n\n\tpost_window: function() {\n\t\tthis.state = \"initial\";\n\t\t$(\"body\").off(\"click\", \".create_post_button\", this.create_post_button_click_handler);\n\n\t\tif (!this.reblog_tree_exists()) {\n\t\t\tXKit.interface.post_window.set_content_html(this.wrap_html_links(XKit.interface.post_window.get_content_html()));\n\t\t\treturn;\n\t\t}\n\n\t\t//also just let chat, link, and quote posts do what they do\n\t\tvar post_type = XKit.interface.post_window.post_type();\n\t\tif (post_type.chat || post_type.quote) {\n\t\t\treturn;\n\t\t}\n\t\tvar has_displayed_ER_warning = XKit.storage.get('editable_reblogs', 'has_displayed_ER_warning', '');\n\t\tif (!has_displayed_ER_warning) {\n\t\t\tXKit.window.show('Editable Reblogs Warning',\n\t\t\t\t\"WARNING: Editable Reblogs no longer preserves Tumblr's reblog \" +\n\t\t\t\t\"structure due to changes on Tumblr's side. Any posts reblogged \" +\n\t\t\t\t\"with Editable Reblogs will display the entire reblog tree as a \" +\n\t\t\t\t\"single blockquoted post.
\" +\n\t\t\t\t\"The XKit team deeply apologizes for any inconvenience this causes, \" +\n\t\t\t\t\"and we're working to restore the original functionality, \" +\n\t\t\t\t\"but Tumblr's updates are in this case beyond our control.
\" +\n\t\t\t\t\"As always, this extension can be disabled at any time from the XKit preferences panel.\",\n\t\t\t\t'error', '
OK
');\n\t\t\t$(\".xkit-er-ack-blockquotes\").click(function() {\n\t\t\t\tXKit.storage.set('editable_reblogs', 'has_displayed_ER_warning', 'true');\n\t\t\t});\n\t\t}\n\t\t//disable on pages that don't include reblog_key and post_id in the URL\n\t\t//for now until we've refactored more effectively\n\t\tvar location_path = window.location.pathname;\n\t\tvar location_items = location_path.split(\"/\");\n\t\tlocation_items.shift();\n\n\t\tif (XKit.page.form_frame) {\n\t\t\tlocation_items = location_items.slice(2);\n\t\t}\n\n\t\tif (location_items[0] != \"reblog\" && location_items[0] != \"edit\") {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.initialize_selected_post_type();\n\t\tthis.scheduled_date = \"Next Tuesday, 10am\";\n\t\tthis.load_initial_metadata();\n\t\tvar element = this.add_edit_button();\n\t\t$(element).one('click', function() {\n\t\t\tthis.edit_the_reblogs();\n\t\t\t$(element).addClass('disabled');\n\t\t}.bind(this));\n\t},\n\n\tadd_edit_button: function() {\n\t\tvar post_margin = $(\".post-form .post-margin\");\n\t\tpost_margin.append(\n\t\t\t''\n\t\t);\n\n\t\tif (!XKit.storage.get('editable_reblogs', 'has_dismissed_button_callout', '')) {\n\t\t\tpost_margin.append(\n\t\t\t\t'
' +\n\t\t\t\t '
Editable Reblogs
' +\n\t\t\t\t '
click this button to trim or edit this post
' +\n\t\t\t\t'
'\n\t\t\t);\n\n\t\t\t$('.xkit-er-callout--container').delay(800).slideDown(800);\n\t\t\t$('.post-form .editor').one('keyup', function() {\n\t\t\t\t$('.xkit-er-callout--container').delay(2000).slideUp(800);\n\t\t\t});\n\n\t\t\t$(\".xkit-er-edit-button\").click(function() {\n\t\t\t\tXKit.storage.set('editable_reblogs', 'has_dismissed_button_callout', 'true');\n\t\t\t\t$('.xkit-er-callout--container').slideUp(800);\n\t\t\t});\n\t\t\t$('.xkit-er-callout--container').click(function() {\n\t\t\t\tXKit.storage.set('editable_reblogs', 'has_dismissed_button_callout', 'true');\n\t\t\t\t$('.xkit-er-callout--container').slideUp(800);\n\t\t\t});\n\t\t}\n\n\t\treturn $('.xkit-er-edit-button')[0];\n\t},\n\n\tedit_the_reblogs: function() {\n\t\ttry {\n\t\t\tvar save_button = $('.post-form--save-button [data-js-clickablesave]');\n\t\t\t// Prevent Tumblr's event handler from acting on the save button\n\t\t\tsave_button.removeAttr(\"data-js-clickablesave\");\n\t\t\t$(\"body\").on(\"click\", \".create_post_button\", this.create_post_button_click_handler);\n\t\t\tthis.process_reblog_content();\n\t\t\tthis.state = \"success\";\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\n\t\t\tthis.get_post_save_button().attr(\"data-js-clickablesave\", \"\");\n\n\t\t\tif (!e.hide_popup) {\n\t\t\t\tvar github_url = XKit.tools.github_issue(\"Editable Reblogs \" + this.state + \" error\",\n\t\t\t\t\t{ state: this.state, \"ER Version\": XKit.installed.get(\"editable_reblogs\").version },\n\t\t\t\te);\n\n\t\t\t\tXKit.window.show('Editable Reblogs Error', 'ERROR: Editable Reblogs failed to proccess some part of your post safely. ' +\n\t\t\t\t\t'Therefore, it has been disabled to prevent unintentional side-effects that could potentially corrupt the post. ' +\n\t\t\t\t\t(!e.hide_url ? '
');\n\t\t\t}\n\t\t}\n\t},\n\n\tload_initial_metadata: function() {\n\t\t//if this is an edit, we need to load the custom date and slug metadata if there is any\n\t\t//so we can maintain it if they don't change anything\n\t\tthis.state = \"metadata\";\n\t\tthis.post_date_metadata = \"\";\n\t\tthis.post_slug_metadata = \"\";\n\t\tvar location_path = window.location.pathname;\n\t\tvar location_items = location_path.split(\"/\");\n\t\tlocation_items.shift();\n\n\t\tif (XKit.page.form_frame) {\n\t\t\tlocation_items = location_items.slice(2);\n\t\t}\n\n\t\tif (location_items[0] != \"edit\") {\n\t\t\treturn;\n\t\t}\n\n\t\tvar post_fetch_request = {\n\t\t\tid: location_items[1],\n\t\t\tform_key: XKit.interface.form_key(),\n\t\t\tpost_type: false\n\t\t};\n\n\t\tXKit.interface.fetch(post_fetch_request, function(response) {\n\t\t\tthis.post_date_metadata = response.data.post.date;\n\t\t\tthis.post_slug_metadata = response.data.post.slug;\n\t\t\tif (response.data.post.is_private === 1) {\n\t\t\t\tthis.selected_post_type = \"PRIVATE\";\n\t\t\t}\n\t\t}.bind(this));\n\t},\n\n\tget_post_save_button: function() {\n\t\treturn $('.post-form--save-button button');\n\t},\n\n\twrap_html_links: function(html_text) {\n\t\tvar nodes = $($.parseHTML(html_text));\n\t\tnodes.find('a').wrap('');\n\t\tvar nodes_text = $('
`;\n\t\t});\n\n\t\ttry {\n\t\t\told_content = XKit.interface.post_window.get_content_html();\n\t\t} catch (e) {\n\t\t\tXKit.window.show('Invalid editor type', 'ERROR: Editable Reblogs cannot currently get content from your default editor type. ' +\n\t\t\t\t'To continue using editable reblogs, click here ' +\n\t\t\t\t'to edit your dashboard settings to use the rich text editor or HTML editor',\n\t\t\t\t'error', \"
OK
\");\n\t\t\tvar error = new Error(\"Editor Type\");\n\t\t\terror.hide_popup = true;\n\t\t\tthrow error;\n\t\t}\n\n\t\tconverted_trail += old_content;\n\n\t\tthis.state = \"mutation\";\n\n\t\tXKit.interface.post_window.set_content_html(converted_trail);\n\n\t\t$(\".btn-remove-trail .icon\").click();\n\t\t$(\".control-reblog-trail\").hide();\n\t},\n\n\treblog_tree_exists: function() {\n\t\t//if we don't have a reblog tree to edit, gtfo\n\t\t//this also applies to new posts\n\t\t//which saves us from worrying about things like photo replies\n\t\treturn $(\".post-form .reblog-list\").length !== 0;\n\t},\n\n\tinitialize_selected_post_type: function() {\n\t\tvar where = XKit.interface.where();\n\t\tif (where.dashboard) {\n\t\t\tthis.selected_post_type = \"PUBLISH\";\n\t\t} else if (where.drafts) {\n\t\t\tthis.selected_post_type = \"DRAFT\";\n\t\t} else if (where.queue) {\n\t\t\tthis.selected_post_type = \"QUEUE\";\n\t\t}\n\t},\n\n\trecord_post_settings: function(e) {\n\t\tvar post_dropdown_exists = $(e.target).parents(\".popover--save-post-dropdown\").length > 0;\n\t\tif (post_dropdown_exists) {\n\t\t\tvar clicked_li = e.target.tagName !== \"LI\" ? e.target.parentNode : e.target;\n\t\t\tfor (var i = 0; i < clicked_li.attributes.length; i++) {\n\t\t\t\t// looking for attribute like \"data-js-publish\" and \"data-js-draft\"\n\t\t\t\tvar attribute = clicked_li.attributes[i].name;\n\t\t\t\tif (attribute.startsWith(\"data-js-\") && !attribute.endsWith(\"preview\")) {\n\t\t\t\t\tvar type = attribute.substring(8).toUpperCase();\n\t\t\t\t\tthis.selected_post_type = type;\n\n\t\t\t\t\tif (type === \"SCHEDULE\") {\n\t\t\t\t\t\t$(\"[data-js-scheduletext]\").off(\"blur\");\n\t\t\t\t\t\t$(\"[data-js-scheduletext]\").on(\"blur\", this.update_scheduled_date.bind(this));\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tupdate_scheduled_date: function(e) {\n\t\tthis.scheduled_date = e.target.value;\n\t},\n\n\tmake_post: function(event) {\n\t\tif (!this.reblog_tree_exists() || this.state != \"success\") {\n\t\t\tXKit.interface.post_window.set_content_html(this.wrap_html_links(XKit.interface.post_window.get_content_html()));\n\t\t\tthis.get_post_save_button().attr(\"data-js-clickablesave\", '');\n\t\t\tthis.get_post_save_button().click();\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tvar post_types = this.post_types;\n\t\t\tswitch (post_types[this.selected_post_type]) {\n\t\t\t\tcase post_types.PUBLISH:\n\t\t\t\t\tthis.send_post_request(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase post_types.QUEUE:\n\t\t\t\t\tthis.send_queue_request(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase post_types.DRAFT:\n\t\t\t\t\tthis.send_draft_request(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase post_types.PRIVATE:\n\t\t\t\t\tthis.send_private_request(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase post_types.SCHEDULE:\n\t\t\t\t\tthis.send_schedule_request(event);\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.state = \"finished\";\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\n\t\t\tvar github_url = XKit.tools.github_issue(\"Editable Reblogs post error\",\n\t\t\t\t{ state: this.state, \"ER Version\": XKit.installed.get(\"editable_reblogs\").version },\n\t\t\te);\n\n\t\t\tXKit.window.show('Editable Reblogs Error',\n\t\t\t\t\"ERROR: Editable Reblogs failed to process some part of your post, and it wasn't posted. \" +\n\t\t\t\t\"Try removing images or media and trying again.\" +\n\t\t\t\t(!e.hide_url ? '
').append(text);\n\t\tnodes.find('.tmblr-truncated').replaceWith('[[MORE]]');\n\t\tXKit.extensions.editable_reblogs.format_video_media(nodes);\n\n\t\t// tumblr_blog must be wrapped in single quotes,\n\t\t// not double, or the dash will nom the shit out of your post\n\t\t//********ALL DOM MANIPULATION ABOVE THIS LINE*********\n\t\ttext = nodes.html();\n\t\t// text = text.replace(/['\"]tumblr_blog['\"]/g, \"tumblr_blog tumblr_blog\");\n\n\t\t// also remove empty HTML if the user hasn't added anything\n\t\tif (text.indexOf(\"
\", text.length - 11) !== -1) {\n\t\t\ttext = text.substring(0, text.length - 11);\n\t\t}\n\t\treturn text;\n\t},\n\n\tformat_video_media: function(nodes) {\n\t\t// parse items embedded in the current post\n\t\tvar embeds = nodes.find('.media-holder');\n\t\t$.each(embeds, function(index, value) {\n\t\t\tvar element = $(value);\n\t\t\telement.find('.media-killer').remove();\n\t\t\telement.find('.media-mover').remove();\n\t\t\telement.find('.thumbnail-preview').remove();\n\t\t\tvar figure = element.find('figure');\n\t\t\tif (!figure.find('iframe').length) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfigure.removeClass('tmblr-embed-placeholder')\n\t\t\t\t\t.removeClass('embed-thumbnail-preview')\n\t\t\t\t\t.addClass('tmblr-embed')\n\t\t\t\t\t.removeAttr('data-embed-code')\n\t\t\t\t\t.unwrap();\n\t\t});\n\t\t// parse items embedded in earlier reblogs\n\t\tvar figures = nodes.find('figure.tmblr-embed');\n\t\t$.each(figures, function(index, value) {\n\t\t\tvar figure = $(value);\n\t\t\tvar iframe = figure.find('iframe');\n\t\t\tif (!iframe.length) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!iframe.is('[data-src]')) {\n\t\t\t\tvar src = iframe.attr('src');\n\t\t\t\tiframe.attr('data-src', src);\n\t\t\t}\n\t\t\tif (!figure.is('[data-orig-height]')) {\n\t\t\t\tvar height = iframe.attr('height');\n\t\t\t\tfigure.attr('data-orig-height', height);\n\t\t\t}\n\t\t\tif (!figure.is('[data-orig-width]')) {\n\t\t\t\tvar width = iframe.attr('width');\n\t\t\t\tfigure.attr('data-orig-width', width);\n\t\t\t}\n\t\t\tif (!figure.is('[data-url]')) {\n\t\t\t\tvar tumblrSource = iframe.attr('data-src');\n\t\t\t\tvar embedId = iframe.attr('id');\n\t\t\t\tvar segments = tumblrSource.split('/');\n\t\t\t\tvar url = segments[6].replace('#' + embedId, '');\n\t\t\t\tfigure.attr('data-url', url);\n\t\t\t}\n\t\t\tif (!figure.is('[data-provider]')) {\n\t\t\t\t//it doesn't seem to matter what this value is as long as it exists\n\t\t\t\tfigure.attr('data-provider', 'youtube');\n\t\t\t}\n\t\t});\n\t},\n\n\tsend_request: function(request) {\n\t\tXKit.interface.kitty.get(function(kitty_data) {\n\n\t\t\tXKit.tools.Nx_XHR({\n\t\t\t\tmethod: \"POST\",\n\t\t\t\turl: \"https://www.tumblr.com/svc/post/update\",\n\t\t\t\tdata: JSON.stringify(request),\n\t\t\t\tjson: true,\n\t\t\t\theaders: {\n\t\t\t\t\t\"X-tumblr-puppies\": kitty_data.kitten,\n\t\t\t\t\t\"X-tumblr-form-key\": XKit.interface.form_key(),\n\t\t\t\t},\n\n\t\t\t\tonerror: function(response) {\n\t\t\t\t\tXKit.interface.kitty.set(\"\");\n\n\t\t\t\t\tvar github_url = XKit.tools.github_issue(\"Editable Reblogs posting error\",\n\t\t\t\t\t\t{ \"ER Version\": XKit.installed.get(\"editable_reblogs\").version,\n\t\t\t\t\t\t user: request.channel_id, body: request[\"post[two]\"]}, {stack: response});\n\n\t\t\t\t\tXKit.window.show(\"Error\",\n\t\t\t\t\t\t\"Error: XER-SR.
There was an error reblogging your post. Please try again shortly. \" +\n\t\t\t\t\t\t'
\");\n\n\t\t$(\"#xkit-close-message-find-blogs\").click(function() {\n\n\t\t\tXKit.window.close();\n\n\t\t\tif (XKit.extensions.find_blogs.is_in_iframe === true) {\n\t\t\t\tXKit.iframe.restore();\n\t\t\t}\n\n\t\t});\n\n\t},\n\n\taverage: function(posts) {\n\n\n\n\t},\n\n\tshow_ump_error: function() {\n\n\t\tif (XKit.storage.get(\"find_blogs\", \"shown_warning_about_show_more\", \"\") !== \"yass\") {\n\t\t\tXKit.window.show(\"Oops: User Menus+ is missing.\", \"Find Blogs requires User Menus+ extension to be installed and enabled in order to work. Please download User Menus+ from the extension gallery and refresh the page to start using this extension.\", \"error\", \"
OK
\");\n\t\t\tXKit.storage.set(\"find_blogs\", \"shown_warning_about_show_more\", \"yass\");\n\t\t}\n\n\t},\n\n\tdestroy: function() {\n\t\tthis.running = false;\n\t\tXKit.interface.sidebar.remove(\"find_blogs_sidebar\");\n\t}\n\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpGNzdGMTE3NDA3MjA2ODExODA4MzkyMjM2MzU5MTQ4NCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1QTExQUI5RjU3ODQxMUUzODM5QzhFMjcwMUMyMERGNiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1QTExQUI5RTU3ODQxMUUzODM5QzhFMjcwMUMyMERGNiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjAxODAxMTc0MDcyMDY4MTFBRTczREVDNEM5OEM0RTE5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkY3N0YxMTc0MDcyMDY4MTE4MDgzOTIyMzYzNTkxNDg0Ii8+IDwvcmRmOkRlc2NyaXB0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","css":"#xkit-find-blogs-background {\n\tbackground: rgba(0,0,0,0.22);\n\tposition: fixed;\n\ttop: 0; left: 0;\n\twidth: 100%; height: 100%;\n\tz-index: 1000;\n}\n\n.xkit-find_blogs {\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N0NDQjdDNTkwMjZFMTFFM0IwRTREQUE2OUI0ODg5QzAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6N0NDQjdDNUEwMjZFMTFFM0IwRTREQUE2OUI0ODg5QzAiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3Q0NCN0M1NzAyNkUxMUUzQjBFNERBQTY5QjQ4ODlDMCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3Q0NCN0M1ODAyNkUxMUUzQjBFNERBQTY5QjQ4ODlDMCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PudeUxgAAADdSURBVHjapFOhDsIwEN0RzCR2ll8AWSyfAHKWn8HOYpF8A3KVIGcnN7m58po8yNGsY2GXXK5t7r27vmvFOZfMsUUy05bhgYisEQw8g6fwCn5Hp9UQgegrALxBOEaKlci9RjtgZQ/u4DckW3Wew7dYP3D+jGlgGD9gb2z9wu1+TMSMABsmkaR+58QI0rljrNSdw8lkrN6MEZSMuSbBeqUmY3+N8eDV5rbW2tD8hApg6kEC9RZ2CtiwsqFOXyQy9S9Qh5MiOQPbTv4LrFgQ3DJO7yAQtQOu/4sgtJcAAwAM9WOixKs6SQAAAABJRU5ErkJggg==);\n}\n\n.xkit-find-blogs-separator {\n\tfont-size: 12px;\n\ttext-transform: uppercase;\n\tmargin-bottom: 10px;\n\tmargin-top: 4px;\n\ttext-align: center;\n\tcolor: rgb(130,130,130);\n\tbackground: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAABCAYAAAD0In+KAAAAEUlEQVQIW2M8dOjQfzs7O0YAFyYEApdFJZwAAAAASUVORK5CYII=') 50% 50% repeat-x;\n}\n\n.xkit-find-blogs-separator div {\n\tbackground: white;\n\tpadding: 0px 10px;\n\tdisplay: inline;\n}\n\n.xkit-find-blogs-blog-list a {\n\n\tfloat: none !important;\n\n}\n\n.xkit-find-blogs-blog-list {\n\tborder-top: 1px solid rgb(200,200,200);\n\tborder-left: 1px solid rgb(200,200,200);\n\theight: 180px;\n\tbox-sizing: border-box;\n\t-webkit-box-sizing: border-box;\n\t-moz-box-sizing: border-box;\n\tfont-weight: normal;\n}\n\n.xkit-find-blogs-blog {\n\tdisplay: inline-block;\n\tfloat: left; height: 45px;\n\twidth: 50%;\n\tborder-right: 1px solid rgb(200,200,200);\n\tborder-bottom: 1px solid rgb(200,200,200);\n\tbox-sizing: border-box;\n\t-webkit-box-sizing: border-box;\n\t-moz-box-sizing: border-box;\n\tposition: relative;\n}\n\n.xkit-find-blogs-blog:hover {\n\tbackground: rgb(245,245,245);\n\tcursor: pointer;\n}\n\n.xkit-find-blogs-blog.xkit-empty-slot,\n.xkit-find-blogs-blog.xkit-empty-slot:hover {\n\tcursor: default;\n\tbackground: white;\n}\n\n.xkit-find-blogs-blog .m_title {\n\tposition: absolute;\n\tleft: 45px;\n\tline-height: 45px;\n\ttop: 0;\n\tmax-width: 110px;\n\ttext-overflow: ellipsis;\n\toverflow: hidden;\n\tfont-size: 14px;\n\twhite-space: nowrap;\n}\n\n.xkit-find-blogs-blog .m_percentage {\n\tposition: absolute;\n\tright: 11px;\n\ttop: 50%;\n\tline-height: 20px;\n\theight: 20px;\n\tmargin-top: -10px;\n\tfont-size: 12px;\n\tcolor: rgb(150,150,150);\n}\n\n.xkit-find-blogs-blog .m_avatar {\n\tposition: absolute;\n\twidth: 25px; height: 25px;\n\ttop: 50%; left: 10px;\n\tmargin-top: -12px;\n\tborder-radius: 3px;\n\tbackground: black;\n}\n\n#xkit-find-blogs-window {\n\tposition: fixed;\n\ttop: 50%;\n\tleft: 50%;\n\theight: 260px;\n\tmargin-top: -130px;\n\tbackground: white;\n\tbox-shadow: 0px 1px 3px rgba(0,0,0,0.44);\n\tborder-radius: 6px;\n\twidth: 500px;\n\tmargin-left: -250px;\n\tfont-size: 16px;\n\tbox-sizing: border-box;\n\t-webkit-box-sizing: border-box;\n\t-moz-box-sizing: border-box;\n\tpadding: 30px;\n\tpadding-top: 21px;\n\tz-index: 1001;\n}\n\n#xkit-find-blogs-window .m_window_title {\n\n\tfont-size: 16px;\n\tfont-weight: bold;\n\tmargin-bottom: 10px;\n\n}\n\n#xkit-find-blogs-subtext {\n\tmargin-top: 10px;\n\tfont-size: 13px;\n\tcolor: rgb(180,180,180);\n}\n\n#xkit-find-blogs-text {\n\tmargin-bottom: 10px;\n}\n\n#xkit-find-blogs-inner {\n\tpadding: 14px 20px;\n}\n\n#xkit-find-blogs-window.xkit-find-blogs-loading #xkit-find-blogs-inner {\n\tpadding: 0px;\n\tpadding-top: 75px;\n\tline-height: 20px;\n\tfont-size: 18px;\n\ttext-align: center;\n\tcolor: rgb(180,180,180);\n}","title":"Find Blogs","description":"Lets you find similar blogs","developer":"STUDIOXENIX","version":"1.2.4","details":"Requires User Menus+ to be installed.","frame":"false","beta":"false","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/find_inactives.json b/Extensions/dist/find_inactives.json
new file mode 100644
index 000000000..5b2f0f6d2
--- /dev/null
+++ b/Extensions/dist/find_inactives.json
@@ -0,0 +1 @@
+{"id":"find_inactives","script":"//* TITLE Find Inactives **//\n//* VERSION 0.4.3 **//\n//* DESCRIPTION Find the inactive blogs you follow **//\n//* DEVELOPER new-xkit **//\n//* DETAILS This extension lets you find blogs that haven't been updated in a certain amount of time. Just go to list of blogs you follow, then click on "Find Inactive Blogs" button below your Crushes to get started. **//\n//* FRAME false **//\n//* BETA false **//\n\nXKit.extensions.find_inactives = new Object({\n\n\trunning: false,\n\n\ttimeout_time: 300,\n\n\tpreferences: {\n\t\ttime: {\n\t\t\ttext: \"Time to mark a blog as inactive\",\n\t\t\tdefault: \"d30\",\n\t\t\tvalue: \"d30\",\n\t\t\ttype: \"combo\",\n\t\t\tvalues: [\n\t\t\t\t\"1 week\", \"d7\",\n\t\t\t\t\"2 weeks\", \"d14\",\n\t\t\t\t\"A month\", \"d30\",\n\t\t\t\t\"Two months\", \"d60\",\n\t\t\t\t\"4 months\", \"d120\",\n\t\t\t\t\"A year\", \"d365\"\n\t\t\t]\n\t\t}\n\t},\n\n\tlanguage_date_day: [\"day\", \"tag\", \" jour\", \" giorn\", \"\\u65e5\", \"g\\u00fcn \", \" d\\u00eda\", \"\\u0434\\u043d\\u044f\", \" dzie\\u0144\", \" dni\", \"dia\", \" dag\", \"\\uc77c\", \"\\u5929\"],\n\tlanguage_date_week: [\"week\", \"woche\", \" semaine\", \"settiman\", \"\\u9031\\u9593\", \" hafta \", \" semana\", \"\\u043d\\u0435\\u0434\\u0435\\u043b\", \" tydzie\\u0144\", \" tygodnie\", \" semana\", \" weken\", \"\\uc8fc\", \"\\u5468\", \"\\u9031\"],\n\tlanguage_date_month: [\"month\", \"monat\", \" mois\", \" mese\", \" mesi\", \"\\u6708\", \" ay \", \" mes\", \"\\u043c\\u0435\\u0441\\u044f\\u0446\", \" mies\", \"m\\u00eas\", \" meses\", \" maand\", \"\\ub2ec\"],\n\tlanguage_date_year: [\"year\", \"jahr\", \" an\", \"anno\", \" anni\", \"\\u5e74\", \" y\\u0131l \", \" a\\u00f1o\", \"\\u0433\\u043e\\u0434\", \" rok\", \" lat\", \" ano\", \" jaar\", \"\\ub144\", \"\\uc5f0\\ub839\"],\n\n\tlanguage_date_strip: [\"Mis \\u00e0 jour il y a\"],\n\n\trun: function() {\n\t\tthis.running = true;\n\n\t\tif (document.location.href.indexOf(\"www.tumblr.com/following\") === -1) { return; }\n\n\t\tXKit.tools.init_css(\"find_inactives\");\n\n\t\t$(\".grey_note\").before('
Find Inactive Blogs
');\n\n\t\t$(\"#xkit-find-inactives-button\").click(function() {\n\n\t\t\tXKit.extensions.find_inactives.start();\n\n\t\t});\n\n\t\t$(document).on('click', '.find-inactives-blog .unfollow_button', function(e) {\n\t\t\tXKit.extensions.find_inactives.unfollow_inactive_blog(e);\n\t\t});\n\t},\n\n\tpeople_list: [],\n\tretired_people_list: [],\n\tpage: 0,\n\tpeople_count: 0,\n\tpeople_index: 0,\n\tpeople_per_page: 25,\n\tconcurrent_requests: 8, //Arbitrary number. This just seemed to go fast. ~7.50 for 1000 Tumblrs\n\n\tstart: function() {\n\n\t\tXKit.extensions.find_inactives.retired_people_list = [];\n\t\tXKit.extensions.find_inactives.people_list = [];\n\t\tXKit.extensions.find_inactives.page = 0;\n\t\tXKit.extensions.find_inactives.people_index = -1;\n\n\t\tXKit.window.show(\"Please wait..\", \"I'm trying to find the inactive blogs, this might take a while.\" + XKit.progress.add(\"find-inactives\") + \"
\");\n\n\t},\n\n\tnext_page: function() {\n\t\tvar self = this;\n\t\tvar next_page = this.page_tracker.get_next_page();\n\t\tif (next_page < 0) {\n\t\t\tif (this.page_tracker.has_completed()) {\n\t\t\t\t$(\"#xkit-find-inactives-status\").html(\"Fetching information about the people I've just learned about...\");\n\t\t\t\tXKit.extensions.find_inactives.list_people();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tthis.page_tracker.start_processing_page(next_page);\n\t\tGM_xmlhttpRequest({\n\t\t\tmethod: \"GET\",\n\t\t\turl: \"http://www.tumblr.com/following/\" + (next_page * 25),\n\t\t\tjson: false,\n\t\t\tonerror: function(response) {\n\t\t\t\tXKit.extensions.find_inactives.show_error(\"Unable to get the blog information. Please try again later.
\");\n\n\t\t$(\"#find-inactives-window-outer\").nanoScroller();\n\n\t\t$(\"#xkit-close-message-find-inactives\").click(function() {\n\n\t\t\t$(\"body\").css(\"overflow\", \"auto\");\n\t\t\tXKit.window.close();\n\n\t\t});\n\n\t\tif ($(\".find-inactives-blog\").length > 4) {\n\n\t\t\t$(\".find-inactives-blog:last-child\").css(\"border-bottom\", \"0\");\n\n\t\t}\n\t},\n\tunfollow_inactive_blog: function(event) {\n\t\tvar username = $(event.target).data('name');\n\t\t//make sure xkit window doesn't hide confirmation dialogue\n\t\t$('#xkit-window-shadow').css('zIndex', 8900);\n\t\t$('#xkit-window').css('zIndex', 9000);\n\t\tXKit.tools.add_function(XKit.extensions.find_inactives.trigger_unfollow, true, username);\n\t},\n\ttrigger_unfollow: function() {\n\t\tvar username = add_tag;\n\t\t// We're gonna assume Tumblr won't permit usernames that'd lead to XSS.\n\t\tvar removalTarget = jQuery(`.find-inactives-blog[data-url=\"http://${username}.tumblr.com/\"]`);\n\t\tTumblr.Dialog.confirm(`Are you sure you want to unfollow ${username}?`, function() {\n\t\t\tTumblr.unfollow({\n\t\t\t\ttumblelog: username,\n\t\t\t\tsource: \"UNFOLLOW_SOURCE_FOLLOWING_PAGE\"\n\t\t\t}, {\n\t\t\t\tsuccess: function() {\n\t\t\t\t\tremovalTarget.hide();\n\t\t\t\t},\n\t\t\t\tcomplete: function() {\n\t\t\t\t\tremovalTarget.hide();\n\t\t\t\t},\n\t\t\t\terror: function() {\n\t\t\t\t\tTumblr.Dialog.alert(\"Something went wrong.\");\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t},\n\n\tdestroy: function() {\n\t\tthis.running = false;\n\t\t$(\"#xkit-find-inactives-button\").remove();\n\t}\n\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpGNzdGMTE3NDA3MjA2ODExODA4MzkyMjM2MzU5MTQ4NCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo3MzI5Rjk5RDVENDQxMUUzOTc0NUVFMzYyMTQ1MzcwNSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo3MzI5Rjk5QzVENDQxMUUzOTc0NUVFMzYyMTQ1MzcwNSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjAxODAxMTc0MDcyMDY4MTFBRTczREVDNEM5OEM0RTE5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkY3N0YxMTc0MDcyMDY4MTE4MDgzOTIyMzYzNTkxNDg0Ii8+IDwvcmRmOkRlc2NyaXB0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","css":"#find-inactives-window-outer {\n\theight: 230px;\n\tborder: 1px solid rgb(190,190,190);\n}\n\n.find-inactives-blog:hover {\n\tbackground: rgb(245,245,245);\n}\n.find-inactives-blog {\n\tborder-bottom: 1px solid rgb(190,190,190);\n\theight: 50px;\n\toverflow: hidden;\n\tposition: relative;\n\tpadding-left: 60px;\n\tfont-size: 13px;\n\tline-height: 16px;\n\tcursor: pointer;\n}\n\n.find-inactives-blog .name {\n\tposition: absolute;\n\ttop: 8px;\n\tleft: 55px;\n\tfont-weight: bold;\n}\n\n.find-inactives-blog .days {\n\tposition: absolute;\n\ttop: 24px;\n\tleft: 55px;\n\tfont-weight: normal;\n\tcolor: rgb(120,120,120);\n}\n\n.find-inactives-blog .avatar {\n\twidth: 32px;\n\theight: 32px;\n\tposition: absolute;\n\ttop: 8px;\n\tleft: 10px;\n\tborder-radius: 4px;\n}\n\n.find-inactives-blog .unfollow_button {\n\tfloat: right;\n\tmargin: 10px;\n}\n","title":"Find Inactives","description":"Find the inactive blogs you follow","developer":"new-xkit","version":"0.4.3","details":"This extension lets you find blogs that haven't been updated in a certain amount of time. Just go to list of blogs you follow, then click on "Find Inactive Blogs" button below your Crushes to get started.","frame":"false","beta":"false","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/fresh_prince.json b/Extensions/dist/fresh_prince.json
new file mode 100644
index 000000000..647940ff1
--- /dev/null
+++ b/Extensions/dist/fresh_prince.json
@@ -0,0 +1 @@
+{"id":"fresh_prince","script":"//* TITLE Fresh Prince **//\n//* VERSION 0.1.1 **//\n//* DESCRIPTION Everything's flipped, turned upside down **//\n//* DEVELOPER new-xkit **//\n//* DETAILS This extension flips everything on the dashboard. Don't expect Tumblr to function correctly whatsoever while this extension is installed. **//\n//* FRAME false **//\n//* SLOW true **//\n//* BETA false **//\n\nXKit.extensions.fresh_prince = new Object({\n\n\trunning: false,\n\n\tpreferences: {\n\t\tfresh_song_of_bel_air: {\n\t\t\ttext: \"NOW THIS IS A STORY ALL ABOUT HOW MY LIFE\",\n\t\t\tdefault: true,\n\t\t\tvalue: true\n\t\t},\n\t\tflavor: {\n\t\t\ttext: \"GOT FLIPPED TURNED UPSIDE DOWN\",\n\t\t\tdefault: \"/AVbQo3IOC_A\",\n\t\t\tvalue: \"/AVbQo3IOC_A\",\n\t\t\ttype: \"combo\",\n\t\t\tvalues: [\n\t\t\t\t\"Original prince of Bel-Air\", \"/AVbQo3IOC_A\",\n\t\t\t\t\"Fresh prince of Neon Genesis\", \"/Zmd1FWen-nY\",\n\t\t\t\t\"Ace Attorney of Bel-Air\", \"/3xYGMizY0k0\",\n\t\t\t\t\"Fresh prince of Gerudo Valley\", \"/WnfNOZ83Fow\",\n\t\t\t\t\"Fresh prince of Lavender Town\", \"/f94ST14pWXE\",\n\t\t\t\t\"Fresh prince of Street Fighting\", \"/o0weWqVca1U\",\n\t\t\t\t\"Fresh prince of falling blocks\", \"/7TBPXyMHf7U\"\n\t\t\t],\n\t\t},\n\t\tloop: {\n\t\t\ttext: \"NEVER STOP SPINNING\",\n\t\t\tdefault: true,\n\t\t\tvalue: true\n\t\t},\n\t\tdisable_rotate: {\n\t\t\ttext: \"Disable full experience\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t}\n\t},\n\n\tremove_fastdash: function() {\n\t\tXKit.tools.add_function(function() {\n\t\t\tvar onResize = Tumblr.fastDashboard.options.boundOnResize;\n\t\t\tvar onScroll = Tumblr.fastDashboard.options.boundOnScroll;\n\t\t\tif (!onResize || !onScroll) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tTumblr.fastDashboard.destroy();\n\t\t\twindow.xkit_restore_fastdash = function() {\n\t\t\t\tTumblr.fastDashboard.options.boundOnResize = onResize;\n\t\t\t\tTumblr.fastDashboard.options.boundOnScroll = onScroll;\n\t\t\t\tTumblr.Events.on(\"DOMEventor:flatscroll\", onScroll);\n\t\t\t\tTumblr.Events.on(\"DOMEventor:flatresize\", onResize);\n\t\t\t};\n\t\t}, true);\n\t},\n\n\trestore_fastdash: function() {\n\t\tXKit.tools.add_function(function() {\n\t\t\twindow.xkit_restore_fastdash();\n\t\t}, true);\n\t},\n\n\trun: async function() {\n\t\tthis.running = true;\n\n\t\tif (this.preferences.fresh_song_of_bel_air.value && $(\".l-container, #base-container\").length > 0) {\n\t\t\t$(\"head\").append('');\n\t\t}\n\n\t\tif (!XKit.extensions.fresh_prince.preferences.disable_rotate.value) {\n\t\t\tawait XKit.css_map.getCssMap();\n\t\t\tconst {keyToCss, descendantSelector} = XKit.css_map;\n\n\t\t\tXKit.tools.add_css(`\n\t\t\t\t.l-header-container, .l-container, .l-footer-container {\n\t\t\t\t\ttransform: rotate(180deg);\n\t\t\t\t\t-webkit-transform: rotate(180deg);\n\t\t\t\t}\n\t\t\t`, 'fresh_prince');\n\n\t\t\tXKit.tools.add_css(`\n\t\t\t\t#base-container > * > * {\n\t\t\t\t transform: scale(1, -1);\n\t\t\t\t}\n\n\t\t\t\t${descendantSelector('menuContainer', 'baseContainer')} {\n\t\t\t\t transform: scale(1, -1);\n\t\t\t\t}\n\n\t\t\t\t${keyToCss('popoverChrome')} > * {\n\t\t\t\t transform: scale(1, -1);\n\t\t\t\t}\n\n\t\t\t\t#glass-container > * {\n\t\t\t\t transform: scale(1, -1);\n\t\t\t\t}\n\n\t\t\t\t#xkit-notifications {\n\t\t\t\t transform: scale(1, -1);\n\t\t\t\t}\n\t\t\t`, 'fresh_prince');\n\t\t\tthis.remove_fastdash();\n\t\t}\n\t},\n\n\tdestroy: function() {\n\t\tthis.running = false;\n\t\tXKit.tools.remove_css(\"fresh_prince\");\n\t\tthis.restore_fastdash();\n\t\t$(\".fresh_prince_video\").remove();\n\t}\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,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\n","title":"Fresh Prince","description":"Everything's flipped, turned upside down","developer":"new-xkit","version":"0.1.1","details":"This extension flips everything on the dashboard. Don't expect Tumblr to function correctly whatsoever while this extension is installed.","frame":"false","beta":"false","slow":"true"}
\ No newline at end of file
diff --git a/Extensions/dist/glowing_follow.json b/Extensions/dist/glowing_follow.json
new file mode 100644
index 000000000..e2b6c72a5
--- /dev/null
+++ b/Extensions/dist/glowing_follow.json
@@ -0,0 +1 @@
+{"id":"glowing_follow","script":"//* TITLE Glowing Follow **//\n//* VERSION 1.0.7 **//\n//* DESCRIPTION Glowing plusses on non-mutual followers' blogs **//\n//* DETAILS Makes the Follow button on people's blogs glow if they are following you and you are not following them. Before proceeding, please keep in mind that sometimes, ignorance is bliss. **//\n//* DEVELOPER new-xkit **//\n//* FRAME true **//\n//* BETA false **//\n\nXKit.extensions.glowing_follow = new Object({\n\n\trunning: false,\n\n\trun: function() {\n\t\tthis.running = true;\n\t\tXKit.tools.init_css(\"glowing_follow\");\n\n\t\tvar follow_button = XKit.iframe.follow_button();\n\n\t\tif (follow_button.length > 0) {\n\t\t\t// We got the follow button!\n\n\t\t\t// Are we already following this person?\n\t\t\tif (follow_button.hasClass(\"hidden\") === true) {\n\t\t\t\t// Yeah. No need for this.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar username = XKit.iframe.get_tumblelog();\n\n\t\t\tvar blog_id = \"\";\n\t\t\tvar m_blogs = XKit.tools.get_blogs();\n\t\t\tfor (var i = 0; i < m_blogs.length; i++) {\n\t\t\t\tif (m_blogs[i] !== \"\") {\n\t\t\t\t\tblog_id = m_blogs[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (blog_id === \"\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tXKit.interface.is_following(username, blog_id).then(function(follow) {\n\t\t\t\tif (follow) {\n\t\t\t\t\tfollow_button.addClass(\"xglow\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t}\n\n\t},\n\n\tdestroy: function() {\n\t\tthis.running = false;\n\t}\n\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QkYzMjcwQUNDRTk3MTFFMjlGRjNBNzgwQUUxNTkwRDkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QkYzMjcwQURDRTk3MTFFMjlGRjNBNzgwQUUxNTkwRDkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCRjMyNzBBQUNFOTcxMUUyOUZGM0E3ODBBRTE1OTBEOSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCRjMyNzBBQkNFOTcxMUUyOUZGM0E3ODBBRTE1OTBEOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Plmir2wAAAOiSURBVHjapJZZkuowDEUhmLEZ9gXLoBfTBSugeh3sjHnsk5yUKi+kq14X+oDYlq+ka1ly++vr63A4dDqdXq/Xbrfv9/t+v+/3+wxbrdbtdjufz8PhMKXE6uVyccjS4/E4nU7X6xVlh+A8n8/BYPAsRNjkH0pMVdFVAnE0GnW7XW2DMplM+OYDaBRYBZ0lDDPENkt8HI9HfGJj7pdwLIjOrEP2sJ9VPCAUJqfTKfp84DsfHx8ffLPEUGM6EehMJiIywCo6IhWgo8o2dGazWZZlhsUH6MyDzpBVlBmG7zrNfBIOdLEkij1swJiIonsMMMMHoQDNt6Hoew3dQJOHg+8syCaznmqgA7dcLlv/yvf3N1GiAzqWxGEYHGAM2xmz+i46s5CGErwzg954PJbGV2EXZ44muBhjF462C2HIL8OsV4iJEbyLzgzokbI1YZ7IUiEmK36ILm+mbxmReQa6XJmU+s6M9mqC7xhmO5qosTfP+sIYAWksj1IePFU2sCZXeKc9toHyagAIeSedIpf4xQZbTLx8iFKg6yna5Ez4znzjGXQKAR0FTs6c0UUvDbCAJ5iJU5WZV3SDrQn7zQ7QGcIM6SSuq1695Bnqu8wEOlZFN1lrgqfmD9GDLp9e6bjYhJKsM54z6J+fn63/k/l83ji/Xq+951jN70GUKota620BlGhkFeQMOyYoZhu5/qsElCUng68g2vN5XyyxoIGcmYKWT6J5Hx3HwRG9PAMrOAYab+xf5VwIxwksxpJZ5dUnrs1mA4MkLkOT1au/WCxqQNvtVn9xlo24CA5l35rKjFc4v2h82T0Yo2QbQI8Zu+lvkVnbA/1QCLTcCgE57wcmqKUD+7YBNjCDNvVOe7+hEx9qVXRmXCqbmO3eY2AZOEyKboGyQzRyjZuoobDb7US/F4IN0cuWKbopzJrbLCEeT2N2yYzowBmTfdQmZnLm5Vp0EH0T2HXR8CViFXs1cCpEZrQnM9ZUkzM3wDJfQDwKwZik67Xp3NjR0DRnwneUDd3+aAPO+4G+26at8gztqzZCiapJnKroKAczVV/LQw70eBPArL3aPF6tVnzHI0q4yBnfLzZhqS/REbQl1PZi6fc96YPOhPF5Er3FR4O8wwzz8bStopdZJHr1TWe+atsKCDrzHiYGWBXdUKzzVWYAFC0FeuRG9bUqqOkbWQgV9ltP1fdgPFLDd31NVWa8a1LpMiigs9PyAjrH4F0xKePFJhM1dMB/BBgAm4e/rS3FFMoAAAAASUVORK5CYII=","css":".xglow {\n\ttext-shadow: 0 0 3px #FFF;\n\tbackground: rgba(0,0,0,0.70) !important;\n\tanimation: glow 1.75s;\n\t-moz-animation: glow 1.75s;\n\t-webkit-animation: glow 1.75s;\n\tanimation-iteration-count: infinite;\n\t-moz-animation-iteration-count: infinite;\n\t-webkit-animation-iteration-count: infinite;\n}\n\n@keyframes glow {\n\t50% {text-shadow: 0 0 0 #FFF;\n\t\tbackground: rgba(0,0,0,0.38);}\n}\n\n@-moz-keyframes glow {\n\t50% {text-shadow: 0 0 0 #FFF;\n\t\tbackground: rgba(0,0,0,0.38);}\n}\n\n@-webkit-keyframes glow {\n\t50% {text-shadow: 0 0 0 #FFF;\n\t\tbackground: rgba(0,0,0,0.38);}\n}\n\n.xglow::before {\n\tfilter: drop-shadow(0 0 3px #FFF);\n\t-webkit-filter: drop-shadow(0 0 3px #FFF);\n\tanimation: glow_before 1.75s;\n\t-moz-animation: glow_before 1.75s;\n\t-webkit-animation: glow_before 1.75s;\n\tanimation-iteration-count: infinite;\n\t-moz-animation-iteration-count: infinite;\n\t-webkit-animation-iteration-count: infinite;\n}\n\n@keyframes glow_before {\n\t50% {filter: drop-shadow(0 0 0 #FFF);}\n}\n\n@-moz-keyframes glow_before {\n\t50% {filter: drop-shadow(0 0 0 #FFF);}\n}\n\n@-webkit-keyframes glow_before {\n\t50% {-webkit-filter: drop-shadow(0 0 0 #FFF);}\n}\n","title":"Glowing Follow","description":"Glowing plusses on non-mutual followers' blogs","developer":"new-xkit","version":"1.0.7","details":"Makes the Follow button on people's blogs glow if they are following you and you are not following them. Before proceeding, please keep in mind that sometimes, ignorance is bliss.","frame":"true","beta":"false","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/go_to_dash.json b/Extensions/dist/go_to_dash.json
new file mode 100644
index 000000000..a33ea9b1b
--- /dev/null
+++ b/Extensions/dist/go_to_dash.json
@@ -0,0 +1 @@
+{"id":"go_to_dash","script":"//* TITLE Go-To-Dash **//\n//* VERSION 1.3.5 **//\n//* DESCRIPTION View a post from a blog on your dashboard or sidebar. **//\n//* DEVELOPER STUDIOXENIX **//\n//* DETAILS This extension adds a 'view' button on blogs that allows you to go back to that post on your dashboard. This feature only works on the blogs you follow, and may fail if the post dates to before you followed them. **//\n//* FRAME true **//\n//* BETA false **//\n\nXKit.extensions.go_to_dash = new Object({\n\n\trunning: false,\n\n\trun: function() {\n\t\t\"use strict\";\n\n\t\t// Not in a blog post\n\t\tif (!XKit.page.blog_frame) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Not following the user\n\t\tif (XKit.iframe.unfollow_button().hasClass(\"hidden\")) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Already inserted\n\t\tif ($(\"#xkit_gotodash\").length > 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tXKit.tools.init_css(\"go_to_dash\");\n\n\t\tvar go_back_html;\n\t\tvar post_id = XKit.iframe.single_post_id();\n\n\t\tvar html_pieces = ['View'];\n\t\tvar next_post_id = BigInt(post_id) + BigInt(1);\n\t\tgo_back_html = html_pieces.join('dashboard?max_post_id=' + next_post_id);\n\n\t\tvar is_following = XKit.iframe.unfollow_button().length;\n\t\tvar place = is_following ? XKit.iframe.dashboard_button() : XKit.iframe.delete_button();\n\t\tplace.before(go_back_html);\n\t\tXKit.iframe.size_frame_to_fit();\n\n\t\tthis.running = true;\n\t},\n\n\tdestroy: function() {\n\t\t$(\"#xkit_gotodash\").remove();\n\t\tXKit.tools.remove_css(\"go_to_dash\");\n\t\tthis.running = false;\n\t}\n\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6REE1QTk4RUYzODVBMTFFM0ExQ0FBQzk4RDE5Q0VGNzkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6REE1QTk4RjAzODVBMTFFM0ExQ0FBQzk4RDE5Q0VGNzkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpEQTVBOThFRDM4NUExMUUzQTFDQUFDOThEMTlDRUY3OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpEQTVBOThFRTM4NUExMUUzQTFDQUFDOThEMTlDRUY3OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pste0wkAAAT2SURBVHja7FZZbFRlFL77LLedtTOdLkJbullLaGmgIlDENI1oKtL6orESI4LGRJKiTwb7wBOJGhqNaQyoWFRiCA0mRDRGSTAa29IlLdbudJ0us+93Hc+dO8stTic+0Df/nIf7n//c7zv3bP9FR9qRLV0YgvxPkHkR/8kLClFZS1N7kQsvzz0EApREdI+1aosbdDtbSH2h8khkQ8zycGD6V//oN6HFe4i4OcjombRqRGWxmva/b9x3CsUyOcF5Fpx3LnjvfsQHNiN4Jw26OndHfmu3pmhfXBONCiEnszbGeRYxUk3oCilLGa4xJE5Fd++l9VsnuUDaEP0rzZSeyH/ha832+qSP7r5LkaV+1jHMuhdxEiF0xSpbPV3elF35LJFlRVDMWP86WK79cJIPP4iGv3UAQdGUQDxyj3ZnVx6RXQsv9Nmvn/AOXmEdk0LIh0SRKI8IQQ+zOhqavMG6lihTKaGzga2msE4IMeH535RoEiAEJCUYklVxzFD7Uhx9rnf5Wlto/o+kgdr2qGl/O66RnkUe8Y18a+85EVkakp01Pf4GXfLkBkAgQIEiIeC+pbFDtuYDa/aeV1jnRPyUQLIrmx9pu2nc8ypGUclXIvZ+550PRUYKP2naTpc/owSUMKUcJIQyV6nzd0ne86yn/zLjmpT14LK5oSPv+S7SXBwVeFxbChoiS4trpVP/2BXf6HXZLbrkkBIQhIAwJRdd1pzopKCn9wP5iDSUWBrPZ1c1o4RKKoGc0vxjX4pCBEUJjKLd/V94+i+E537X17yI4iRlKVcCSlWEKqpIZa2Si5JdHRfCDgiLtvio5XCHurA21dWqLPW2PamSs1YCAuedh2KjzCVQu7rq4/6/LqcnoIzb5PTywTXQ63a9bWk8i9M5mbodFhC4RjnnNBBIdZllU2Ju6ANMpZMbDcWk3EQFJjN6zFjOogrBsCTnBkyYBEmJrN6T38FpK2yDUz1LV19mVseQzJ+AEQRdgGtMCQWuxCQQVJMaLO778SlnKsKoApFzhWZvrgTXcw6egb6NzwWBFYIumB1ScEgN718HBMpSTeWUxdInCmG3EpNA8dQmYh+M97dar6t5zTvwicTqHFr/+SzjmDI98SZwc86ZtZ/e4wMrKE4hKC4E7YCg2bYXkg/GjH0kOHlNiQnNQCWFdf7NuaRBDxVpqDuOkgZZzweX3X92rnzfLgSdUaD0LvB+KJspzj0usj66tBWKWIYLLw0qAUHw00+bIeaySAXEMnTpU7GPyKZMZcGpW4kjCNhEeHFICKyxrglEZGS9ylpjbniXMhXBKxAc78BXvHc2CQiCnz6SK6UlLhjvW1Lbagl9PiSLMu9Q59WFZn6B0MoGQnidc45DdYElbNW2vdamcypbtey+b/g7/0i3Ai0m0507HxzXpsq8li5cK1dFFO4A79DVwPgNkfElbUhjhWF3G3yrHHpYgfEfHbfPKW3iRTXz8e40d3BOpe25ziRHVODgjhT8qxB9jKQJQyH0BwyG5GUHA9Vx+zznnkhTxrOf1qe950ljibH+lLb4oEIJt0E01oeKcSMKvtEez93PxYgrfZ/Mdh3Y9GeCpDVFh/TVLZS1It15NDzf5+67yDoydSJ6/7PDmX9ZUJzAtVZ1QR2RnYtBWKgsPrDO+1ciywNCcCU2lMVMBHMXm7b4xwsntpYg82/PQyGgtpTgHwEGAAr05bylXlXaAAAAAElFTkSuQmCC","css":"#xkit_gotodash::before {\n\tcontent: \"\\EA18\";\n\tfont-family: tumblr-icons, Blank;\n\t-webkit-font-smoothing: antialiased;\n\t-moz-osx-font-smoothing: grayscale;\n\tfont-smoothing: antialiased;\n\ttext-rendering: optimizeLegibility;\n\tfont-style: normal;\n\tfont-variant: normal;\n\tfont-weight: 400;\n\ttext-decoration: none;\n\ttext-transform: none;\n}\n","title":"Go-To-Dash","description":"View a post from a blog on your dashboard or sidebar.","developer":"STUDIOXENIX","version":"1.3.5","details":"This extension adds a 'view' button on blogs that allows you to go back to that post on your dashboard. This feature only works on the blogs you follow, and may fail if the post dates to before you followed them.","frame":"true","beta":"false","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/hideavatars.json b/Extensions/dist/hideavatars.json
new file mode 100644
index 000000000..086640d4c
--- /dev/null
+++ b/Extensions/dist/hideavatars.json
@@ -0,0 +1 @@
+{"id":"hideavatars","script":"//* TITLE Hide Avatars **//\n//* VERSION 1.0.0 **//\n//* DESCRIPTION Hides avatars on a per-url basis **//\n//* DEVELOPER New-XKit **//\n//* FRAME false **//\n//* BETA true **//\n\nXKit.extensions.hideavatars = new Object({\n\n\trunning: false,\n\n\thidden_avatar: 'data:image/png;base64,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',\n\n\tblognames: [],\n\n\trun: function() {\n\n\t\tthis.running = true;\n\n\t\tXKit.tools.init_css(\"hideavatars\");\n\n\t\tXKit.extensions.hideavatars.load_blogs();\n\n\t\tif (XKit.page.react) {\n\t\t\tXKit.tools.async_add_function(async () => {\n\t\t\t\t/* globals tumblr */\n\t\t\t\treturn await tumblr.getCssMap();\n\t\t\t})\n\t\t\t.then(({stickyContainer, reblogHeader}) => {\n\t\t\t\tconst sticky_top_selector = `.xkit--react .${stickyContainer[0]}`;\n\t\t\t\tconst sticky_selector = this.blognames.map(x => `${sticky_top_selector} a[title=\"${x.title}\"]::before`).join(',');\n\n\t\t\t\tconst header_top_selector = '.xkit--react article header';\n\t\t\t\tconst header_selector = this.blognames.map(x => `${header_top_selector} a[title=\"${x.title}\"]::before`).join(',');\n\n\t\t\t\tconst reblog_top_selector = `.xkit--react .${reblogHeader[0]}`;\n\t\t\t\tconst reblog_selector = this.blognames.map(x => `${reblog_top_selector} a[title=\"${x.title}\"]::before`).join(',');\n\t\t\t\tconst reblog_badge_selector = this.blognames.map(x => `${reblog_top_selector} a[title=\"${x.title}\"] svg`).join(',');\n\n\t\t\t\tXKit.tools.add_css(`\n\t\t\t\t\t${sticky_selector}, ${header_selector}, ${reblog_selector} {\n\t\t\t\t\t\tcontent: \"\";\n\t\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\t\tbackground-image: url(\"${this.hidden_avatar}\");\n\t\t\t\t\t\tbackground-size: contain;\n\t\t\t\t\t\tposition: absolute;\n\t\t\t\t\t\tz-index: 1;\n\t\t\t\t\t}\n\t\t\t\t\t${sticky_selector} {\n\t\t\t\t\t\theight: 64px;\n\t\t\t\t\t\twidth: 64px;\n\t\t\t\t\t}\n\t\t\t\t\t${header_selector} {\n\t\t\t\t\t\theight: 38px;\n\t\t\t\t\t\twidth: 38px;\n\t\t\t\t\t}\n\t\t\t\t\t${reblog_selector} {\n\t\t\t\t\t\theight: 25px;\n\t\t\t\t\t\twidth: 25px;\n\t\t\t\t\t}\n\t\t\t\t\t${reblog_badge_selector} {\n\t\t\t\t\t\tdisplay: none;\n\t\t\t\t\t}\n\t\t\t\t`, 'hideavatars');\n\t\t\t});\n\n\t\t\treturn;\n\t\t}\n\n\t\tXKit.post_listener.add(\"hideavatars\", XKit.extensions.hideavatars.hide_avatars);\n\t\tXKit.extensions.hideavatars.hide_avatars();\n\n\t},\n\n\thide_avatars: function() {\n\t\tconst {hidden_avatar, blognames} = XKit.extensions.hideavatars;\n\n\t\tif (XKit.interface.where().dashboard) {\n\t\t\tblognames.forEach(function(blogname) {\n\t\t\t\t//Regular avatars\n\t\t\t\t$(\".post_avatar_link\").filter(function() {\n\t\t\t\t\treturn $(this).attr(\"href\").split(\"//\")[1].split(\".\")[0] === blogname.title;\n\t\t\t\t}).attr(\"style\", \"opacity: 0.5; background-image: url('\" + hidden_avatar + \"');\");\n\n\t\t\t\t//Avatars in notifications\n\t\t\t\t$(\".notification a\").filter(function() {\n\t\t\t\t\treturn $(this).attr(\"href\").split(\"//\")[1].split(\".\")[0] === blogname.title;\n\t\t\t\t}).find(\".avatar\").attr(\"src\", hidden_avatar).attr(\"style\", \"opacity: 0.5\");\n\t\t\t});\n\t\t}\n\n\t\tif (XKit.interface.where().inbox) {\n\t\t\tXKit.extensions.hideavatars.blognames.forEach(function(blogname) {\n\t\t\t\t$(\".post_avatar_link\").filter(function() {\n\t\t\t\t\treturn $(this).attr(\"href\").split(\"//\")[1].split(\".\")[0] === blogname.title;\n\t\t\t\t}).find(\".post_avatar_image\").attr(\"src\", hidden_avatar);\n\n\t\t\t\t$(\".post_avatar_link\").filter(function() {\n\t\t\t\t\treturn $(this).attr(\"href\").split(\"//\")[1].split(\".\")[0] === blogname.title;\n\t\t\t\t}).attr(\"style\", \"opacity: 0.5; background-image: url('\" + hidden_avatar + \"');\");\n\t\t\t});\n\t\t}\n\n\t\tif (XKit.interface.where().activity) {\n\t\t\t//Top-four avatars\n\t\t\tXKit.extensions.hideavatars.blognames.forEach(function(blogname) {\n\t\t\t\t$(\".ui_jumbo_avatar\").filter(function() {\n\t\t\t\t\treturn $(this).attr(\"title\") === blogname.title;\n\t\t\t\t}).attr(\"style\", \"opacity: 0.5; background-image: url('\" + hidden_avatar + \"');\");\n\n\t\t\t\t//Avatars in activity lines\n\t\t\t\t$(\".ui_avatar_link\").filter(function() {\n\t\t\t\t\treturn $(this).attr(\"title\") === blogname.title;\n\t\t\t\t}).find(\".avatar\").attr(\"style\", \"opacity: 0.5; background-image: url('\" + hidden_avatar + \"');\");\n\t\t\t});\n\t\t}\n\t},\n\n\tload_blogs: function() {\n\n\t\tvar m_storage = XKit.storage.get(\"hideavatars\", \"blognames\", \"\");\n\n\t\tif (m_storage !== \"\") {\n\t\t\ttry {\n\t\t\t\tXKit.extensions.hideavatars.blognames = JSON.parse(m_storage);\n\t\t\t} catch (e) {\n\t\t\t\tXKit.extensions.hideavatars.blognames = [];\n\t\t\t\tconsole.error(\"Failed to parse m_storage in XKit.extensions.hideavatars.load_blogs\");\n\t\t\t}\n\t\t} else {\n\t\t\tXKit.extensions.hideavatars.blognames = [];\n\t\t}\n\n\t},\n\n\tsave_blogs: function() {\n\n\t\ttry {\n\t\t\tconsole.log(\"Trying to save \" + XKit.extensions.hideavatars.blognames.length + \" blogs..\");\n\t\t\tconsole.log(JSON.stringify(XKit.extensions.hideavatars.blognames));\n\t\t\tXKit.storage.set(\"hideavatars\", \"blognames\", JSON.stringify(XKit.extensions.hideavatars.blognames));\n\t\t} catch (e) {\n\t\t\tXKit.window.show(\"Unable to save data\", \"Hide Avatars could not save data
Could not find blog name with data-id \" + $(this).attr('data-id') + \"
\",\n\t\t\t\t\t\"error\",\n\t\t\t\t\t'
OK
'\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tXKit.window.show(\"Edit blog name\", \"Blog Name: If you delete this blog, its avatar will show again\", \"question\", \"
Save blogname
Delete
Cancel
\");\n\n\t\t\t$(\"#xkit-hideavatars-save-blogname\").click(function() {\n\n\t\t\t\tXKit.extensions.hideavatars.load_blogs();\n\n\t\t\t\tfor (var i = 0; i < XKit.extensions.hideavatars.blognames.length; i++) {\n\n\t\t\t\t\tif (m_cat_obj.id === XKit.extensions.hideavatars.blognames[i].id) {\n\n\t\t\t\t\t\tXKit.extensions.hideavatars.blognames[i].title = $(\"#xkit-hideavatars-blogname-add-title\").val();\n\t\t\t\t\t\tXKit.extensions.hideavatars.save_blogs();\n\n\t\t\t\t\t\tXKit.window.close();\n\n\t\t\t\t\t\tXKit.extensions.hideavatars.cpanel(m_div);\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t\t$(\"#xkit-hideavatars-delete-blogname\").click(function() {\n\n\t\t\t\tXKit.window.show(\"You sure?\", \"Delete blog \\\"\" + m_cat_obj.title + \"\\\"?\", \"warning\", \"
Confirm
Cancel
\");\n\n\t\t\t\t$(\"#xkit-hideavatars-delete-blogname-confirm\").click(function() {\n\n\t\t\t\t\tXKit.extensions.hideavatars.load_blogs();\n\n\t\t\t\t\tfor (var i = 0; i < XKit.extensions.hideavatars.blognames.length; i++) {\n\n\t\t\t\t\t\tif (m_cat_obj.id === XKit.extensions.hideavatars.blognames[i].id) {\n\n\t\t\t\t\t\t\tXKit.extensions.hideavatars.blognames.splice(i, 1);\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tXKit.extensions.hideavatars.save_blogs();\n\t\t\t\t\tXKit.extensions.hideavatars.cpanel(m_div);\n\t\t\t\t\tXKit.window.close();\n\n\t\t\t\t});\n\n\t\t\t});\n\n\t\t});\n\n\t},\n\n\tget_blogname: function(id) {\n\n\t\tfor (var i = 0; i < XKit.extensions.hideavatars.blognames.length; i++) {\n\n\t\t\tif (id === XKit.extensions.hideavatars.blognames[i].id) {\n\n\t\t\t\treturn XKit.extensions.hideavatars.blognames[i];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tblogname_exists: function(title) {\n\n\t\ttitle = title.toLowerCase();\n\n\t\tfor (var i = 0; i < XKit.extensions.hideavatars.blognames.length; i++) {\n\n\t\t\tif (title === XKit.extensions.hideavatars.blognames[i].title.toLowerCase()) {\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tdestroy: function() {\n\t\tXKit.tools.remove_css(\"hideavatars\");\n\t\tXKit.post_listener.remove(\"hideavatars\");\n\t}\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,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\n","css":"#xkit-hideavatars-custom-panel-toolbar {\n\tbackground: rgb(245,245,245);\n\tpadding: 3px 15px;\n\tborder-bottom: 1px solid rgb(190,190,190);\n}\n\n.xkit-hideavatars-cp-item {\n\tpadding: 10px 16px 10px 16px;\n\tborder-bottom: 1px dotted rgb(190,190,190);\n\tcursor: pointer;\n}\n\n.xkit-hideavatars-cp-item:hover {\n\tbackground: rgb(240,240,240);\n}\n","title":"Hide Avatars","description":"Hides avatars on a per-url basis","developer":"New-XKit","version":"1.0.0","frame":"false","beta":"true","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/highlighter.json b/Extensions/dist/highlighter.json
new file mode 100644
index 000000000..a0482f088
--- /dev/null
+++ b/Extensions/dist/highlighter.json
@@ -0,0 +1 @@
+{"id":"highlighter","script":"//* TITLE Highlighter **//\n//* VERSION 0.1.6 **//\n//* DESCRIPTION Don't miss things **//\n//* DETAILS The cousin of Blacklister, this extension highlights posts depending on the words you decide. When a word you add is found on a post, the post will get a yellow-ish background. **//\n//* DEVELOPER STUDIOXENIX **//\n//* FRAME false **//\n//* BETA false **//\n//* SLOW true **//\n\nXKit.extensions.highlighter = new Object({\n\n\trunning: false,\n\tslow: true,\n\n\tpreferences: {\n\t\t\"sep1\": {\n\t\t\ttext: \"Under the Hood options\",\n\t\t\ttype: \"separator\"\n\t\t},\n\t\t\"use_improved\": {\n\t\t\ttext: \"Use improved checking\",\n\t\t\tslow: true,\n\t\t\tdefault: true,\n\t\t\tvalue: true\n\t\t},\n\t\t\"dont_highlight_me\": {\n\t\t\ttext: \"Don't highlight my posts\",\n\t\t\tdefault: true,\n\t\t\tvalue: true\n\t\t},\n\t\t\"check_for_blocking\": {\n\t\t\ttext: \"Don't highlight posts hidden by Blacklist\",\n\t\t\tdefault: true,\n\t\t\tvalue: true\n\t\t},\n\t\t\"sep2\": {\n\t\t\ttext: \"Highlighted Words\",\n\t\t\ttype: \"separator\"\n\t\t}\n\t},\n\n\thighlightered: [],\n\n\trun: function() {\n\t\tthis.running = true;\n\t\tXKit.tools.init_css(\"highlighter\");\n\n\t\tvar m_highlighter = XKit.storage.get(\"highlighter\", \"words\", \"\").split(\",\");\n\t\tif (m_highlighter !== \"\") {\n\t\t\tthis.highlightered = m_highlighter;\n\t\t}\n\n\t\tif ($(\".posts .post\").length > 0) {\n\t\t\tXKit.post_listener.add(\"highlighter\", XKit.extensions.highlighter.check);\n\t\t\tXKit.extensions.highlighter.check();\n\t\t}\n\n\t},\n\n\tcheck: function() {\n\n\t\t$(\".posts .post\").not(\".mine\").not(\".xhighlighter-done\").each(function() {\n\n\t\t\t// Check if it's something we should not touch.\n\t\t\tif ($(this).attr('id') === \"new_post\") { return; }\n\t\t\tif ($(this).css(\"display\") === \"none\") { return; }\n\n\t\t\t// Add class to not do this twice.\n\t\t\t$(this).addClass(\"xhighlighter-done\");\n\n\t\t\t// if has no text content, no need to do this.\n\t\t\tif ($(this).find(\".post_content\").length <= 0) { return; }\n\n\t\t\t// Collect the tags\n\t\t\tvar m_tags = \"\";\n\t\t\tif ($(this).find(\".tag\").length > 0) {\n\t\t\t\t$(this).find(\".tag\").each(function() {\n\t\t\t\t\tm_tags = m_tags + \" \" + $(this).html().replace(\"#\", \"\");\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tif ($(this).find(\".post_tag\").length > 0) {\n\t\t\t\t\t$(this).find(\".post_tag\").each(function() {\n\t\t\t\t\t\tm_tags = m_tags + \" \" + $(this).html().replace(\"#\", \"\");\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Collect the title contents too.\n\t\t\tvar m_title = \"\";\n\t\t\tif ($(this).find(\".post_title\").length > 0) {\n\t\t\t\tm_title = $(this).find(\".post_title\").html();\n\t\t\t}\n\n\t\t\t// Collect the content.\n\t\t\tvar m_content = $(this).find(\".post_content_inner\").html() || \"\";\n\n\t\t\tm_content = m_content + \" \" + m_title + \" \" + m_tags;\n\t\t\tm_content = XKit.tools.replace_all(m_content, \" \", \" \");\n\t\t\tm_content = m_content.toLowerCase();\n\n\t\t\t// Strip HTML tags.\n\t\t\tm_content = m_content.replace(/<(?:.|\\n)*?>/gm, '');\n\n\t\t\tvar m_result = XKit.extensions.highlighter.do_post(m_content);\n\t\t\tif (m_result !== \"\") {\n\t\t\t\tXKit.extensions.highlighter.highlight_post($(this), m_result);\n\t\t\t}\n\n\n\t\t});\n\n\t\t$(\".xhighlighter_open_post\").unbind(\"click\");\n\t\t$(\".xhighlighter_open_post\").bind(\"click\", function() {\n\n\t\t\tvar m_div = $(\"#\" + $(this).attr('data-post-id'));\n\t\t\t$(m_div).removeClass(\"xhighlighter_highlightered_post\");\n\t\t\t$(m_div).find(\".post_info\").css(\"display\", \"block\");\n\t\t\t$(m_div).find(\".post_controls\").css(\"display\", \"block\");\n\t\t\t$(m_div).find(\".post_footer_links\").css('display', 'block');\n\t\t\t$(m_div).find(\".post_tags\").css('display', 'block');\n\t\t\t$(m_div).find(\".post_footer\").css('display', 'table');\n\n\t\t\t$(m_div).find(\".full_answer_container_wrapper\").css(\"display\", \"block\");\n\n\t\t\t$(m_div).find(\".xhighlighter_excuse\").remove();\n\t\t\t$(m_div).find(\".post_content\").html($(m_div).find(\".xhighlighter_old_content\").html());\n\n\t\t});\n\n\t\tXKit.tools.add_function(function() {\n\t\t\t/*Tumblr.Events.on(\"DOMEventor:flatscroll\", function(n) {\n\t\t\t\tconsole.log(JSON.stringify(n));\n\t\t\t\t//n.documentHeight = 0;\n\t\t\t\t// if ((n.documentHeight - n.windowScrollY) < n.windowHeight * 3) {\n\t\t\t\tconsole.log(\" -- 1] \" + (n.documentHeight - n.windowScrollY));\n\t\t\t\tconsole.log(\" -- 2] \" + n.windowHeight * 3 + \" <-- must be smaller than this\");\n\t\t\t});*/\n\t\t\tTumblr.Events.trigger(\"DOMEventor:updateRect\");\n\t\t}, true, \"\");\n\n\t},\n\n\thighlight_post: function(obj, word) {\n\n\t\tif (XKit.extensions.highlighter.preferences.dont_highlight_me.value === true) {\n\t\t\tif ($(obj).hasClass(\"is_mine\") === true) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (XKit.extensions.highlighter.preferences.check_for_blocking.value === true) {\n\t\t\tif ($(obj).hasClass(\"xblacklist_hidden_post\") === true || $(obj).hasClass(\"xblacklist_blacklisted_post\")) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t$(obj).append(\"
\" + word + \"
\");\n\t\t$(obj).addClass(\"xhighlighter_highlightered_post\");\n\n\t},\n\n\tdo_post: function(post_content) {\n\n\t\tif ($.trim(post_content) === \"\") { return \"\"; }\n\t\tpost_content = post_content.replace(/\\n/g, ' ');\n\t\tvar p_words = post_content.split(\" \");\n\n\t\tfor (var i = 0; i < XKit.extensions.highlighter.highlightered.length; i++) {\n\n\t\t\tvar m_word = XKit.extensions.highlighter.highlightered[i].toLowerCase();\n\t\t\tif ($.trim(m_word) === \"\") { continue; }\n\n\t\t\tvar m_word_wildcard = false;\n\n\t\t\tif (m_word.substring(m_word.length - 1) === \"*\") {\n\t\t\t\t// This word is wildcarded!\n\t\t\t\tm_word_wildcard = true;\n\t\t\t\tm_word = m_word.substring(0, m_word.length - 1);\n\t\t\t}\n\n\t\t\tif (m_word.indexOf(\" \") !== -1) {\n\t\t\t\tm_word_wildcard = true;\n\t\t\t}\n\n\t\t\tif (m_word_wildcard === false) {\n\n\t\t\t\t// Well this one is easy:\n\n\t\t\t\t// First lets strip the dots or commas.\n\n\t\t\t\tif (p_words.indexOf(m_word) !== -1) {\n\t\t\t\t\t// We've found the word!\n\t\t\t\t\treturn m_word;\n\t\t\t\t} else {\n\t\t\t\t\tif (XKit.extensions.highlighter.preferences.use_improved.value === true) {\n\t\t\t\t\t\t// This will use some CPU...\n\t\t\t\t\t\tif (post_content.indexOf(m_word) !== -1) {\n\t\t\t\t\t\t\tfor (var j = 0; j < p_words.length; j++) {\n\t\t\t\t\t\t\t\tif (p_words[j].indexOf(m_word) !== -1) {\n\t\t\t\t\t\t\t\t\tvar mp_word = p_words[j].replace(/\\./g, '');\n\t\t\t\t\t\t\t\t\tmp_word = mp_word.replace(/\\,/g, '');\n\t\t\t\t\t\t\t\t\tmp_word = mp_word.replace(/\\u2026/g, '');\n\t\t\t\t\t\t\t\t\tif (m_word === mp_word) {\n\t\t\t\t\t\t\t\t\t\treturn m_word;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// Ugh. Wildcarded. This will\n\t\t\t\t// require some processing power.\n\t\t\t\t// To save CPU time, let's run it in the\n\t\t\t\t// post_content first, continue only if\n\t\t\t\t// we can find it there.\n\t\t\t\tif (post_content.indexOf(m_word) !== -1) {\n\n\t\t\t\t\t// Ugh. Even worse, we've found it,\n\t\t\t\t\t// now we need to get into a loop.\n\t\t\t\t\tfor (var p_i = 0; p_i < p_words.length; p_i++) {\n\n\t\t\t\t\t\tif (p_words[p_i] === \"\") { continue; }\n\t\t\t\t\t\tif (p_words[p_i].indexOf(m_word) !== -1) {\n\t\t\t\t\t\t\treturn m_word;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (p_i < p_words.length) {\n\t\t\t\t\t\t\tvar tmp_word = p_words[p_i] + \" \" + p_words[p_i + 1];\n\n\t\t\t\t\t\t\t// This is a dirty fix but it should work for now.\n\t\t\t\t\t\t\tif (p_words[p_i + 2] !== \"\" || typeof p_words[p_i + 2] !== \"undefined\") {\n\t\t\t\t\t\t\t\ttmp_word = tmp_word + \" \" + p_words[p_i + 2];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (p_words[p_i + 3] !== \"\" || typeof p_words[p_i + 3] !== \"undefined\") {\n\t\t\t\t\t\t\t\ttmp_word = tmp_word + \" \" + p_words[p_i + 3];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (p_words[p_i + 4] !== \"\" || typeof p_words[p_i + 4] !== \"undefined\") {\n\t\t\t\t\t\t\t\ttmp_word = tmp_word + \" \" + p_words[p_i + 4];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (tmp_word.indexOf(m_word) !== -1) {\n\t\t\t\t\t\t\t\treturn m_word;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\t// Found nothing.\n\t\treturn \"\";\n\n\n\t},\n\n\tdestroy: function() {\n\t\tthis.running = false;\n\t\t$(\".xhighlighter-done\").each(function() {\n\t\t\t$(this).removeClass(\"xhighlighter_highlightered_post\");\n\t\t});\n\t\t$(\".xhighlighter-reason\").remove();\n\t\t$(\".xhighlighter-done\").removeClass(\"xhighlighter-done\");\n\t\t$(\".xhighlighter_highlightered_post\").removeClass(\"xhighlighter_highlightered_post\");\n\t\tXKit.tools.remove_css(\"highlighter\");\n\t},\n\n\tcreate_highlighter_div: function(word) {\n\n\t\tvar m_html = \"
\";\n\t\t$(m_div).append(m_html);\n\n\t\t$(\".xkit-highlightered-word-delete\").unbind(\"click\");\n\t\t$(\".xkit-highlightered-word-delete\").click(function() {\n\n\t\t\tvar m_index = XKit.extensions.highlighter.highlightered.indexOf($(this).attr('data-word'));\n\t\t\tif (m_index === -1) { return; }\n\n\t\t\tXKit.extensions.highlighter.highlightered.splice(m_index, 1);\n\t\t\tXKit.extensions.highlighter.save_highlighter();\n\t\t\tXKit.extensions.highlighter.cpanel(m_div);\n\t\t\tXKit.extensions.xkit_preferences.restart_extension(\"highlighter\");\n\n\t\t});\n\n\t\t$(\"#highlighter-tips\").click(function() {\n\n\t\t\tXKit.window.show(\"A few tips on highlighting\", \"
\" +\n\t\t\t\t\"
You can add \\\"*\\\" at the end of a word to wildcard it.
\" +\n\t\t\t\t\"
Wildcarded words match words that begin with it: for example, \\\"cat*\\\" will find \\\"category\\\", \\\"capital\\\" etc.
\" +\n\t\t\t\t\"
If you add something that contains 2 or more words, it will be wildcarded automatically
\" +\n\t\t\t\t\"
Adding too much words, especially wildcard ones, will slow your computer down dramatically.
\" +\n\t\t\t\t\"
\", \"info\", \"
OK
\");\n\n\t\t});\n\n\t\t$(\"#highlighter-delete-all\").click(function() {\n\n\t\t\tXKit.window.show(\"Delete list\", \"Delete all your highlightered words?\", \"question\", \"
Yes, delete my list.
Cancel
\");\n\n\t\t\t$(\"#xkit-highlighter-delete-all-continue\").click(function() {\n\n\t\t\t\tvar m_array = [];\n\n\t\t\t\tXKit.extensions.highlighter.highlightered = m_array;\n\t\t\t\tXKit.extensions.highlighter.save_highlighter();\n\t\t\t\tXKit.window.close();\n\t\t\t\tXKit.extensions.highlighter.cpanel(m_div);\n\t\t\t\tXKit.extensions.xkit_preferences.restart_extension(\"highlighter\");\n\n\t\t\t});\n\n\t\t});\n\n\t\t$(\"#highlighter-add-button\").click(function() {\n\n\t\t\tXKit.window.show(\"Add word to highlighter\", \"Enter the word you want to add. Your words can not contain commas or backslashes. Before adding a word, please check \\\"Tips on Highlighting\\\" section.\", \"question\", \"
Add word
Cancel
\");\n\n\t\t\t$(\"#xkit-highlighter-add-word\").click(function() {\n\n\t\t\t\tvar $m_to_add = $(\"#xkit-highlighter-word\");\n\t\t\t\tvar m_to_add = $m_to_add.val();\n\t\t\t\tfunction complain(problem) {\n\t\t\t\t\t$m_to_add\n\t\t\t\t\t\t.css(\"border-color\", \"red\")\n\t\t\t\t\t\t.attr(\"placeholder\", problem)\n\t\t\t\t\t\t.val(\"\")\n\t\t\t\t\t\t.click(function() {\n\t\t\t\t\t\t\t$m_to_add\n\t\t\t\t\t\t\t\t.removeAttr(\"style\")\n\t\t\t\t\t\t\t\t.attr(\"placeholder\", \"Enter a word here.\")\n\t\t\t\t\t\t\t\t.off(\"click\");\n\t\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (m_to_add === \"\" || $.trim(m_to_add) === \"\") {\n\t\t\t\t\tcomplain(\"If you don't wanna add anything, the cancel button's right there.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (m_to_add.indexOf(\",\") !== -1) {\n\t\t\t\t\tcomplain(\"The word you enter cannot have commas in it.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (m_to_add.indexOf(\"\\\\\") !== -1) {\n\t\t\t\t\tcomplain(\"The word you enter cannot have backslashes in it.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (m_to_add.length <= 1) {\n\t\t\t\t\tcomplain(\"Words must be at least two characters.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (m_to_add.substring(0, 1) === \"#\") {\n\t\t\t\t\tcomplain(\"Please do not add hashtags to words.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (XKit.extensions.highlighter.check_if_exists(m_to_add) === true) {\n\t\t\t\t\tcomplain(m_to_add + \" is already in the highlight list.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tXKit.extensions.highlighter.highlightered.push(m_to_add);\n\t\t\t\tXKit.extensions.highlighter.save_highlighter();\n\t\t\t\tXKit.window.close();\n\t\t\t\tXKit.extensions.highlighter.cpanel(m_div);\n\t\t\t\tXKit.extensions.xkit_preferences.restart_extension(\"highlighter\");\n\n\t\t\t});\n\n\t\t});\n\n\t\t$(\"#xkit-extensions-panel-right\").nanoScroller();\n\t\t$(\"#xkit-extensions-panel-right\").nanoScroller({ scroll: 'top' });\n\n\t}\n\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,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\n","css":"#xkit-highlighter-none {\n\tpadding: 15px;\n\tcolor: rgb(150,150,150);\n\tfont-size: 14px;\n\tline-height: 22px;\n\ttext-align: center;\n}\n\n.xhighlighter-reason {\n\tposition: absolute;\n\twidth: 64px;\n\tbackground: rgba(0,0,0,0.44);\n\ttext-align: center;\n\tleft: -85px;\n\ttop: 75px; padding: 4px 2px;\n\tcolor: rgba(255,255,255,0.88);\n\tborder-radius: 6px; font-size: 11px;\n\tbox-shadow: inset 0px 1px 2px rgba(0,0,0,0.11), 0px 1px 0px rgba(255,255,255,0.11);\n}\n\n.xhighlighter_highlightered_post {\n\tbox-shadow: 0px 0px 6px 4px rgba(255,255,255,0.45);\n}\n\n.xhighlighter_highlightered_post,\n.xhighlighter_highlightered_post .post_content {\n\topacity: 1;\n\tbackground: #fffeee !important;\n}\n\n.xhighlighter_excuse {\n\tpadding: 0; text-align: left; font-size: 12px;\n\tcolor: rgb(130,130,130); height: 40px; line-height: 40px;\n\tposition: relative; margin-top: 5px;\n}\n\n.xhighlighter_open_post {\n\tposition: absolute;\n\theight: 30px; line-height: 20px;\n\ttop: 50%; margin-top: -15px;\n\tright: 0px; margin-bottom: 0;\n}\n\n.xhighlighter_open_post:active {\n\tposition: absolute !important;\n\ttop: 50% !important; margin-top: -14px !important;\n\tright: 0px !important;\n}\n\n.xhighlighter_hidden_post {\n\tdisplay: none;\n}\n\n.xkit-highlighter-add-margins-to-ul {\n\tmargin: 0; padding: 0px 20px;\n}\n\n.xkit-highlighter-add-margins-to-ul li {\n\tmargin-bottom: 10px;\n}\n\n#highlighter-toolbar {\n\tbackground: rgb(245,245,245);\n\tpadding: 3px 15px;\n\tborder-bottom: 1px solid rgb(190,190,190);\n}\n\n.xkit-highlightered-word {\n\tborder-bottom: 1px solid rgb(190,190,190);\n\tpadding: 0px 15px 0px 40px;\n\theight: 30px;\n\tline-height: 30px;\n\tcolor: rgb(100,100,100);\n\tfont-size: 12px;\n\tposition: relative;\n}\n\n.xkit-highlightered-word:last-child {\n\tborder-bottom: 0;\n}\n\n.xkit-highlightered-word-delete {\n\tmargin-right: 10px;\n\tmargin-left: 4px;\n\tcolor: #AD074A;\n\tcursor: pointer;\n\tposition: absolute;\n\theight: 30px; line-height: 30px;\n\tleft: 15px; top: 0;\n}\n\n.xkit-highlightered-word-delete:hover {\n\tcolor: #CC0857;\n}","title":"Highlighter","description":"Don't miss things","developer":"STUDIOXENIX","version":"0.1.6","details":"The cousin of Blacklister, this extension highlights posts depending on the words you decide. When a word you add is found on a post, the post will get a yellow-ish background.","frame":"false","beta":"false","slow":"true"}
\ No newline at end of file
diff --git a/Extensions/dist/jk_across_pages.json b/Extensions/dist/jk_across_pages.json
new file mode 100644
index 000000000..f34f4d368
--- /dev/null
+++ b/Extensions/dist/jk_across_pages.json
@@ -0,0 +1 @@
+{"id":"jk_across_pages","script":"//* TITLE J/K Across Pages **//\n//* VERSION 1.1.3 **//\n//* DESCRIPTION Allow Tumblr's J/K navigation to move between pages **//\n//* DEVELOPER beiju **//\n//* FRAME false **//\n//* BETA true **//\n\nXKit.extensions.jk_across_pages = new Object({\n\t/*\n\t * If the top of the last post is this far below the top of the screen or less, j will move to the next page.\n\t */\n\tscrollBufferJ: 60,\n\t/*\n\t * If the top of first post is this far below the top of the screen or more, k will move to the previous page.\n\t */\n\tscrollBufferK: 59,\n\t/*\n\t * Leave this much overlap when using view_entire_posts\n\t */\n\tscrollBufferInside: 50,\n\t/*\n\t * This is the size of the gap between posts\n\t */\n\tpostBuffer: 20,\n\t/*\n\t * How long scroll animations should take (milliseconds)\n\t */\n\tscrollAnimationDuration: 100,\n\n\t$posts: false,\n\n\trunning: false,\n\n\n\tpreferences: {\n\t\t\"sep0\": {\n\t\t\ttype: 'separator',\n\t\t\ttext: \"Other\"\n\t\t},\n\t\t\"show_notifications\": {\n\t\t\ttext: \"Show notifications when moving between pages\",\n\t\t\t'default': true,\n\t\t\tvalue: true\n\t\t},\n\t\t\"view_entire_posts\": {\n\t\t\ttext: \"Scroll through the entire post, even if it's longer than the screen\",\n\t\t\t'default': false,\n\t\t\tvalue: false\n\t\t}\n\t},\n\n\trun: function() {\n\t\tthis.$posts = jQuery('.post_container').not('#new_post_buttons');\n\n\t\tXKit.tools.init_css(\"jk_across_pages\");\n\n\t\t// If #auto_pagination_loader exists, endless scrolling is enabled and this extension is useless\n\t\tif (jQuery('#auto_pagination_loader').length > 0) return;\n\n\t\tif (/jk_across_pages_first/i.test(window.location.hash)) {\n\t\t\tconsole.log(\"Scrolling to first post\", this.$posts.first());\n\t\t\tjQuery('html, body').animate({\n\t\t\t\tscrollTop: this.$posts.first().offset().top - this.scrollBufferJ\n\t\t\t}, this.scrollAnimationDuration);\n\t\t\twindow.location.hash = '';\n\t\t} else if (/jk_across_pages_last/i.test(window.location.hash)) {\n\t\t\tconsole.log(\"Scrolling to last post\", this.$posts.last());\n\t\t\tjQuery('html, body').animate({\n\t\t\t\tscrollTop: this.$posts.last().offset().top - this.scrollBufferK\n\t\t\t}, this.scrollAnimationDuration);\n\t\t\twindow.location.hash = '';\n\t\t}\n\n\t\tvar that = this;\n\t\tjQuery(document.body).bind('keydown.xkit_jk_across_pages', function(evt) {\n\t\t\tif (!evt.shiftKey && !evt.ctrlKey && !evt.altKey && !evt.metaKey) {\n\t\t\t\t// If the key wasn't J or K, we have nothing to do here.\n\t\t\t\tif (evt.which !== 74 /* j */ && evt.which !== 75 /* k */) return;\n\n\t\t\t\t// If the new post field has focus, do nothing.\n\t\t\t\tif (jQuery('.scrollverlay.active').length !== 0) return;\n\t\t\t\t// If XKit preferences are open, do nothing\n\t\t\t\tif (jQuery('#xkit-control-panel').length !== 0) return;\n\t\t\t\t// If the user is typing in an input, do nothing\n\t\t\t\tif (jQuery('input:focus').length !== 0) return;\n\n\t\t\t\tthat.$posts = jQuery('.post_container').not('#new_post_buttons');\n\n\t\t\t\tif (that.preferences.view_entire_posts.value && evt.which === 74 /* j */ &&\n\t\t\t\t\tthat.postAtY(that.scrollBufferJ + 1)[0] == that.postAtY(window.innerHeight - that.scrollBufferJ)[0]) {\n\n\t\t\t\t\tevt.stopPropagation(); // Try to stop Tumblr's event listener\n\n\t\t\t\t\t/* Animate this twice to make sure Tumblr's scrolling doesn't override it */\n\t\t\t\t\tvar scrollTo = window.scrollY + window.innerHeight - that.scrollBufferInside;\n\t\t\t\t\tjQuery(document.body).animate({ scrollTop: scrollTo }, that.scrollAnimationDuration, function() {\n\t\t\t\t\t\t$(this).animate({ scrollTop: scrollTo }, that.scrollAnimationDuration);\n\t\t\t\t\t});\n\n\t\t\t\t\treturn; // Don't try to go to the next page\n\t\t\t\t}\n\n\t\t\t\tif (evt.which === 74 /* j */ && (that.$posts.last().offset().top - window.scrollY <= that.scrollBufferJ || window.scrollY + window.innerHeight >= that.$posts.last().offset().top + that.$posts.last().height())) {\n\t\t\t\t\tif (jQuery('#next_page_link').length > 0) {\n\t\t\t\t\t\tif (that.preferences.show_notifications.value === true) XKit.notifications.add(\"Moving to next page\", \"ok\");\n\t\t\t\t\t\twindow.location = jQuery('#next_page_link').attr('href') + '#jk_across_pages_first';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (that.preferences.show_notifications.value === true) XKit.notifications.add(\"Already at last page\", \"warning\");\n\t\t\t\t\t}\n\t\t\t\t} else if (evt.which === 75 /* k */ && that.$posts.first().offset().top - window.scrollY >= that.scrollBufferK) {\n\t\t\t\t\tif (jQuery('#previous_page_link').length > 0) {\n\t\t\t\t\t\tif (that.preferences.show_notifications.value === true) XKit.notifications.add(\"Moving to previous page\", \"ok\");\n\t\t\t\t\t\twindow.location = jQuery('#previous_page_link').attr('href') + '#jk_across_pages_last';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (that.preferences.show_notifications.value === true) XKit.notifications.add(\"Already at first page\", \"warning\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tthis.running = true;\n\t},\n\n\tpostAtY: function(y) {\n\t\tvar x = jQuery('#posts').offset().left + 1;\n\t\treturn jQuery(document.elementFromPoint(x, y)).closest('.post_container');\n\t},\n\n\tdestroy: function() {\n\t\ttry {\n\t\t\tjQuery(document.body).unbind('.xkit_jk_across_pages');\n\t\t\tXKit.tools.remove_css(\"jk_across_pages\");\n\t\t\tthis.running = false;\n\t\t} catch (err) {\n\t\t\tif (console && console.error) console.error(err);\n\t\t}\n\t}\n\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTU5RDUwRTFDRUE0MTFFMjlGRjNBNzgwQUUxNTkwRDkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTU5RDUwRTJDRUE0MTFFMjlGRjNBNzgwQUUxNTkwRDkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBNTlENTBERkNFQTQxMUUyOUZGM0E3ODBBRTE1OTBEOSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBNTlENTBFMENFQTQxMUUyOUZGM0E3ODBBRTE1OTBEOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Poz+E8EAAAOsSURBVHjapFbNSyRHFK+qrnZmR9dxVlYxCcqiCyrsZQMeBGFhCYHc9ri3XPJP5Lz/RU655JJDWJLLgqKLBxkQXBDFsISQIavLgitqnFGn6728quouq3uqm/14DENX1av3/X6v+LNffmCGFALnHDUBywhQ2Q/aNf9gv5FZRnSntAUqO0WeXgGUqSCG2Rn4EgtkRZedZjzcX0rl2VuQTgYMHgW1QuYKgKcbtD2yTLpPAKoo1FzO+Jl3kRc4JerQCzQ39FrIh/cf3R390rtonEnXOGiE/SQjdv9uv/531zdfC/Rt5yi+/+ZH0a+xT6J74w+2W2vrr37LioU5BWne5r94+NXde+wz6LvJpy93/kCeuB3hnFUKxm9PVd/vdDqnp6cVDDKSzca4jbdxAoWuVfujUsAq6RcXFxsbG6urq0mSVLBRmbqi0h54PYUMK67h2tra5eXl8fHx1tYWq9SgC1eB9sM1mg0U7Smlgre2t7ePjo7s9/7+/uTk5OzsbJAT8lZKV+a6XSCs4PDwcGdnx9/Z3NxstVrNZjPgAORaUvhNRH4lA3R2dra+vl6Q0u/3KRlXV1eD/GDjk1GukxUoulmQdX19vbKyQmra7bbbXF5eHh4e7na79Xq92gOZwY5OMcVnUMGQIUT0u7fRaIyNjVlXBnDF9DY6BTc4GlbgYuIr6BsqK6JiklMnACmCFJAyBeD5TssyztRX54GdEinqlntAun3TaFnG6WZULge2AxMVTjIls9fr+QpOTk5ov24o2Mk8M1rmIReCMLC3t0c4UdiJ43hpaWmQHxX67gh/YthGKxBZsbi4KITAPC0sLEgpA/wM/Z6WAOnsRgW6EUKdXKvV5ubmDg4O3M709PTo6GiQ2Q476EMG14AVU97RxMTE1FQK5oQQMzMzHzIeDFzfEKuGa0K3kZERarr5+XmaWWVsdADJzcvDJVkPud71fxUKKA0UdyoniljV2Oid6ymjm5nbMuUUfZoLHFnn3Z9q4ds7rTtll4Pw6YiG3Zt3/3SvzmqNmJnYUIIlGuSjdx0T/Lz7/vnmz4+/ftIcaX3CQH7d2X/R/jWSETcu2Lkmb0AMWVyTb8//+un3Z6qvjynOdrQWqgCLD5q0MGUc3WrEQzKmPEDWDdII4jY7kRT1BjEImhGYBy8YKDbuvbc03nAmIiG4JqUgDHY6kxEfiuL8Yy0g3SlQNsIsYqZMiFMV5oHrjo8Kd066Ea07VQXer7ICyiuCkyRZDxvpQdGW/hdgAP9if38Csi+wAAAAAElFTkSuQmCC","css":"/*\n * This allows the j key to scroll to the top of the last post,\n * no matter how tall it is compared to the user's screen\n */\n.l-footer-container {\n\theight: 100%;\n}","title":"J/K Across Pages","description":"Allow Tumblr's J/K navigation to move between pages","developer":"beiju","version":"1.1.3","frame":"false","beta":"true","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/limit_people.json b/Extensions/dist/limit_people.json
new file mode 100644
index 000000000..8d494cbba
--- /dev/null
+++ b/Extensions/dist/limit_people.json
@@ -0,0 +1 @@
+{"id":"limit_people","script":"//* TITLE Limit People **//\n//* VERSION 0.2.4 **//\n//* DESCRIPTION Limit the appearance of blogs on dash **//\n//* DETAILS Some people on your dashboard posting a lot? Limit people limits how many consecutive posts by the same person appear on your dashboard at once. If a user makes more than 2 consecutive posts, the rest will be hidden until you click on a button to show them. **//\n//* DEVELOPER new-xkit **//\n//* FRAME false **//\n//* BETA false **//\n\nXKit.extensions.limit_people = new Object({\n\n\trunning: false,\n\n\tpreferences: {\n\t\tlimit: {\n\t\t\ttext: \"Hide consecutive posts after the \",\n\t\t\tdefault: \"2\",\n\t\t\tvalue: \"2\",\n\t\t\ttype: \"combo\",\n\t\t\tvalues: [\n\t\t\t\t\"3rd Post (default)\", \"after2\",\n\t\t\t\t\"4th Post\", \"after3\",\n\t\t\t\t\"5th Post\", \"after4\",\n\t\t\t\t\"6th Post\", \"after5\",\n\t\t\t],\n\t\t},\n\t\tdont_limit_me: {\n\t\t\ttext: \"Don't limit my own posts\",\n\t\t\tdefault: false,\n\t\t\tvalue: false,\n\t\t\ttype: \"checkbox\"\n\t\t},\n\t},\n\n\trun: function() {\n\t\tthis.running = true;\n\n\t\tif (XKit.interface.where().dashboard !== true) { return; }\n\n\t\tif ($(\"#posts\").length > 0) {\n\t\t\tXKit.tools.init_css(\"limit_people\");\n\t\t\tXKit.post_listener.add(\"limit_people\", XKit.extensions.limit_people.do);\n\t\t\tXKit.extensions.limit_people.do();\n\n\t\t\t$(document).on(\"click\", \".xkit-limit-people-opener\", XKit.extensions.limit_people.open);\n\n\t\t}\n\n\t},\n\n\topen: function(e) {\n\n\t\tvar m_obj = $(e.target);\n\n\t\t$($(m_obj).attr('data-to-get')).removeClass(\"xkit-limit-people-grouped-hidden\");\n\n\t\t$($(m_obj).attr('data-to-get') + \" .xkit-limit-people-grouped-hidden\").each(function() {\n\n\t\t\t$(this).attr('class', $(this).attr('data-old-classes') + \" xkit-limit-people-grouped-hidden\");\n\t\t\t$(this).removeAttr('data-old-classes');\n\n\t\t});\n\n\t\t$($(m_obj).attr('data-to-get') + \" .post.xkit-limit-people-grouped-hidden\").css(\"opacity\", \"0\").removeClass(\"xkit-limit-people-grouped-hidden\");\n\n\t\t$($(m_obj).attr('data-to-get') + \" .post\").animate({ opacity: 1}, 400);\n\n\t\t$($(m_obj)).parent().slideUp('slow');\n\n\t\tsetTimeout(function() { XKit.post_listener.check(true); }, 300);\n\n\t},\n\n\tlast_url: \"\",\n\tlast_count: 0,\n\tlast_group_id: XKit.tools.random_string(),\n\tlast_grouped: false,\n\n\tdo: function() {\n\t\tvar size_changed = false;\n\n\t\tvar posts = XKit.interface.get_posts(\"xkit-limit-people-checked\");\n\n\t\tvar after_v = parseInt(XKit.extensions.limit_people.preferences.limit.value.replace(\"after\", \"\"));\n\n\t\tvar no_endless = $(\"body\").hasClass(\"without_auto_paginate\");\n\n\t\tvar total = $(posts).length;\n\n\t\t$(posts).each(function(index) {\n\t\t\t\n\t\t\tif ($(this).parents('.peepr-drawer').length > 0) { return; }\n\t\t\t\n\t\t\tvar m_post = XKit.interface.post($(this));\n\t\t\t$(this).addClass(\"xkit-limit-people-checked\");\n\n\t\t\tif (XKit.extensions.limit_people.preferences.dont_limit_me.value === true) {\n\n\t\t\t\tif (m_post.is_mine === true) { return; }\n\n\t\t\t}\n\n\t\t\tif ($(this).hasClass(\"xkit_view_on_dash_post\")) { return; }\n\t\t\tif ($(this).is(':hidden')) { return; }\n\n\t\t\t// // console.log(\"owner = \" + m_post.owner + \"\\n last = \" + XKit.extensions.limit_people.last_url);\n\n\t\t\tvar force_group_this = false;\n\n\t\t\tif (index === total - 1 && no_endless) {\n\n\t\t\t\tif (((XKit.extensions.limit_people.last_count - after_v) + 1) >= 1) {\n\n\t\t\t\t\tm_post.owner = \"\";\n\t\t\t\t\tforce_group_this = true;\n\n\t\t\t\t\t$(this).parent().addClass(\"xkit-limit-people-group-\" + XKit.extensions.limit_people.last_url + \"-\" + XKit.extensions.limit_people.last_group_id).addClass(\"xkit-limit-people-group-\" + XKit.extensions.limit_people.last_url + \"-\" + XKit.extensions.limit_people.last_group_id + \"-container\");\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif (m_post.owner !== XKit.extensions.limit_people.last_url) {\n\t\t\t\tif ((XKit.extensions.limit_people.last_grouped && !$(this).hasClass(\"xkit-limit-people-grouped-hidden\") && (XKit.extensions.limit_people.last_count - 1) > after_v - 1) || force_group_this) {\n\t\t\t\t\t// console.log(\"** LIMIT PEOPLE: Closing the previous group.... [\" + XKit.extensions.limit_people.last_url+ \"]\");\n\t\t\t\t\t$(\".xkit-limit-people-group-\" + XKit.extensions.limit_people.last_url + \"-\" + XKit.extensions.limit_people.last_group_id + \"-container\").not(\".xkit-limit-people-grouped-hidden\").last().after(\"
Show \" + ((XKit.extensions.limit_people.last_count - after_v) + 1) + \" more by \" + XKit.extensions.limit_people.last_url + \"
\");\n\t\t\t\t}\n\t\t\t\t// console.log(\"** LIMIT PEOPLE: Generating new group.... [\" + m_post.owner + \"]\");\n\t\t\t\tXKit.extensions.limit_people.last_url = m_post.owner;\n\t\t\t\tXKit.extensions.limit_people.last_count = 0;\n\t\t\t\tXKit.extensions.limit_people.last_group_id = XKit.tools.random_string();\n\t\t\t\tXKit.extensions.limit_people.last_grouped = false;\n\t\t\t} else {\n\t\t\t\t// console.log(\"** LIMIT PEOPLE: Continuing from the last group. [\" + XKit.extensions.limit_people.last_url + \"]\");\n\t\t\t\tXKit.extensions.limit_people.last_count++;\n\t\t\t\tXKit.extensions.limit_people.last_grouped = true;\n\t\t\t}\n\n\t\t\t$(this).parent().addClass(\"xkit-limit-people-group-\" + XKit.extensions.limit_people.last_url + \"-\" + XKit.extensions.limit_people.last_group_id).addClass(\"xkit-limit-people-group-\" + XKit.extensions.limit_people.last_url + \"-\" + XKit.extensions.limit_people.last_group_id + \"-container\");\n\n\t\t\tif (XKit.extensions.limit_people.last_count >= after_v) {\n\t\t\t\t$(this).attr('data-old-classes', $(this).attr('class'));\n\t\t\t\t$(this).attr('class', \"xkit-limit-people-grouped-hidden\");\n\t\t\t\t$(this).parent().addClass(\"xkit-limit-people-grouped-hidden\");\n\t\t\t}\n\n\t\t});\n\n\t\tif (size_changed) {\n\n\t\t\tXKit.extensions.limit_people.call_tumblr_resize();\n\n\t\t}\n\n\n\t},\n\n\tcall_tumblr_resize: function() {\n\n\t\tXKit.tools.add_function(function() {\n\t\t\tTumblr.Events.trigger(\"DOMEventor:updateRect\");\n\t\t}, true, \"\");\n\n\t},\n\n\tdestroy: function() {\n\t\tthis.running = false;\n\t\tXKit.post_listener.remove(\"limit_people\");\n\t}\n\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpGNzdGMTE3NDA3MjA2ODExODA4MzkyMjM2MzU5MTQ4NCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFREI5QTZDMzZEMjIxMUUzOUM1NkIzMjQ0OERGQUU5RCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFREI5QTZDMjZEMjIxMUUzOUM1NkIzMjQ0OERGQUU5RCIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjAyODAxMTc0MDcyMDY4MTE4QkRBRjU5ODYxRUUyRjREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkY3N0YxMTc0MDcyMDY4MTE4MDgzOTIyMzYzNTkxNDg0Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+j7AWYwAABIBJREFUeNrsmW9sFEUUwOfN7O7dXu8Kd7e9lgOu6aE9FUr90BiblLQBFT6ABeM/xA/wycQmfve7MfGbicHEGIIxRlNSqU1NQFP/F/GDkIgBq6VF0HIVK9Bq7+jtzY6zZwVpusvt3dztNe5k09zeztv3fn1v3rx5B5nX0IoeGCEPwNUhIfA84Hngf+4B0YOs7SKp53B8C9Q33/ySzV00Ln9Ff3yDTo2KVQeZ18W9S0HK1mHcstNmjnHhw9ynu1iu9kKIW+/rPWNvvamvZSefxieLA+CLWMQld70DWltRqFobnyxKrxgPYG0TSe1zsE5S+7hIDXlAanvRcfbgIjXkgXhXFUQquIghlKiCyPKeBPd2YiGqXS0lPAAvhLwQ8sppL4Q8gNoo5oxfRpwqNkWE1JEIguX/G/JnXlXWP+RURIhqDkDKfwu7Pqp/0Sd3Hyxyfm7kWS4iRDUHkIXEszF1BKFiAdiVj0Tp5QBubAXilHIAnxsAPoEAkhsAwpTyalRxwX5xSsVkIecExAMQl0YhkIDmR6W7nyheROn92rh4jI6/yzKXytW+8H5H6cKr7iN37cXNO0rfPdKjdLyfzXxTBsDRB0spodZsIxseh4b7hYQBu36eTgwYl4ZKAhjsdGZ6opfcsx8CjcLXBcv8RsfeMtKfIX3OCcBQd1ET5RBJPonXP1IJ028b+l90cpBOHkH6n0UC9BRh+lMk2YvkYPXSlIkxRCf774gBC8MP2zwmrQdIy66qmr4E48Iw/emwbRq1PtdLG/swt97FIQdJ616Qg/mzB61PZFiyuvC6bbXQdzDNsDZSsjuZyoGa6JyYZoD1Gji223bPjChbDy0eo47v4SWAsn3g1i1/vmOwOrfWAMcfW95xTd2k9RmUn4dQ4dfS3Kx+6hWoWyO19bEbV42pz+nEe0gJ48hmlplm878iOu9WY2v50pzbCqqGkPavK1bJnS8vPlI1nppAbUCSihsfMPegme/10y9BpF1K7mHZKzR9gl39DklBs2jTZytbFuY+fnr5BLrxeRzf4qSsyaN8FimhxT11vB+HUzixHTFqnB+gP38A9a04usng7rr2A8pdq7wHVIc7Ls8JBesL9Wmj1P7CzcoZJ3dDdDOS6yCUwOaJ/tv8ucNkXQ+s7UHZGTpxlM2OQSCOiI9l/0D5OacA2CKEmoS5mfggcu+tN8c65FgHYoapWm0gyn6WPgFaO4RTpiPH3qZTn+B4D9QnUfZ3evlL+yCE3MgBS63+KFJjWI0hVQP/P38jSPJXdlUyyrIzIKlIqTfvpk/mz75ZUlvF0Hl6QZlpuhTMXwDTCmANBbCoCUYENRqA/LdehKZOdO6Q0L6QkWOZNMqkl4JJKvg0DoN5djJ91WiC+cKIlH1+t7VQXFuF6tZgkYLHOF4M/BryRxyAMWpvYeU7c3TBAixgBp4/ugjmi/LP4F+N8O1ndD1zJw9gN7oSZihagdWBP8wdVfBV1PSArYUutVXsPHaDzaf5VWQPRlrpv/PxEFrpAK40d4UCYA/AVQCotSzkcPwtwACiu2RPTpU5QwAAAABJRU5ErkJggg==","css":".xkit-limit-people-grouped-hidden {\n\tdisplay: none !important;\n\theight: 0; visibility: hidden;\n\tbackground: red;\n}\n\n.xkit-limit-people-opener {\n\tcolor: rgba(255,255,255,0.43);\n\ttext-shadow: none;\n\tfont-size: 13px;\n\tbackground: rgba(255,255,255,0.06);\n\tpadding: 10px;\n\tborder-radius: 6px;\n\ttext-align: center;\n\tcursor: pointer;\n}\n\n.xkit-limit-people-opener:hover {\n\tbackground: rgba(255,255,255,0.08);\n\n}","title":"Limit People","description":"Limit the appearance of blogs on dash","developer":"new-xkit","version":"0.2.4","details":"Some people on your dashboard posting a lot? Limit people limits how many consecutive posts by the same person appear on your dashboard at once. If a user makes more than 2 consecutive posts, the rest will be hidden until you click on a button to show them.","frame":"false","beta":"false","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/mass_deleter.json b/Extensions/dist/mass_deleter.json
new file mode 100644
index 000000000..7004e904f
--- /dev/null
+++ b/Extensions/dist/mass_deleter.json
@@ -0,0 +1 @@
+{"id":"mass_deleter","script":"//* TITLE Mass Deleter **//\n//* VERSION 0.2.1 **//\n//* DESCRIPTION Mass unlike likes / delete drafts **//\n//* DETAILS Used to mass unlike posts or delete drafts. Please use with caution, especially Mass Unlike part is extremely experimental. **//\n//* DEVELOPER STUDIOXENIX **//\n//* FRAME false **//\n//* BETA false **//\n\nXKit.extensions.mass_deleter = new Object({\n\n\trunning: false,\n\n\tpreferences: {\n\t\t\"enable_mass_unlike\": {\n\t\t\ttext: \"Enable Mass Unlike Functionality (Extremely Experimental! Use with caution.)\",\n\t\t\tdefault: false,\n\t\t\tvalue: false,\n\t\t\texperimental: true\n\t\t}\n\t},\n\n\trun: function() {\n\t\tthis.running = true;\n\n\t\tif (XKit.interface.where().likes === true) {\n\t\t\tif (XKit.extensions.mass_deleter.preferences.enable_mass_unlike.value === true) {\n\t\t\t\tXKit.extensions.mass_deleter.init_likes();\n\t\t\t}\n\t\t}\n\n\t\tif (XKit.interface.where().drafts === true) {\n\t\t\tXKit.extensions.mass_deleter.init_drafts();\n\t\t}\n\n\t},\n\n\tinit_drafts: function() {\n\n\t\tXKit.interface.sidebar.add({\n\t\t\tid: \"xkit-mass-deleter-sidebar\",\n\t\t\ttitle: \"Mass Deleter\",\n\t\t\titems: [\n\t\t\t\t{ id: \"xkit-mass-deleter-100\", text: \"Delete 100 Drafts\" },\n\t\t\t\t{ id: \"xkit-mass-deleter-1000\", text: \"Delete 1000 Drafts\" }\n\t\t\t]\n\t\t});\n\n\t\t$(\"#xkit-mass-deleter-100\").click(function() {\n\t\t\tXKit.extensions.mass_deleter.delete_drafts(100);\n\n\t\t\treturn false;\n\t\t});\n\n\t\t$(\"#xkit-mass-deleter-1000\").click(function() {\n\t\t\tXKit.extensions.mass_deleter.delete_drafts(1000);\n\n\t\t\treturn false;\n\t\t});\n\n\t},\n\n\tdelete_drafts_limit: 0,\n\tdelete_drafts_page: 1,\n\tdelete_drafts_array: [],\n\n\tdelete_from_array_current: 0,\n\tdelete_from_array_max: 0,\n\n\tdelete_next_max: 3,\n\tdelete_next_current: 0,\n\n\tdelete_fail_count: 0,\n\n\tdelete_last_post_id: 0,\n\n\tdelete_drafts: function(limit) {\n\n\t\tXKit.extensions.mass_deleter.delete_drafts_limit = limit;\n\t\tXKit.extensions.mass_deleter.delete_drafts_array = [];\n\t\tXKit.extensions.mass_deleter.delete_drafts_page = 1;\n\n\t\tXKit.window.show(\"Mass Deleting Drafts\", \"This might take a long, long time...
You might get a \\\"No Posts Found\\\" page when visiting the Likes page after Mass Unliking. Like a few posts and try again in a few hours, and it should return to normal. If XKit is unable to unlike posts, it's Tumblr's servers trying to adjust to unlikes. Try again in a couple of hours before Mass Unliking again.\", \"info\", \"
\");\n\n\t\t\t\tvar stop_action = false;\n\n\t\t\t\tif ($(\".no_posts_found\", m_div).length > 0) {\n\t\t\t\t\t// Posts ended!\n\t\t\t\t\t// But it might be Tumblr messing up.\n\t\t\t\t\tconsole.log(\"current = \" + XKit.extensions.mass_deleter.unlike_next_current);\n\t\t\t\t\tconsole.log(\" max = \" + XKit.extensions.mass_deleter.unlike_next_max);\n\t\t\t\t\tif (XKit.extensions.mass_deleter.unlike_next_current >= XKit.extensions.mass_deleter.unlike_next_max) {\n\t\t\t\t\t\treturn XKit.extensions.mass_deleter.unlike_current_array();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.log(\"Page empty, but retrying anyways...\");\n\t\t\t\t\t\tXKit.extensions.mass_deleter.unlike_next_current++;\n\t\t\t\t\t\tXKit.extensions.mass_deleter.unlike_likes_page++;\n\t\t\t\t\t\tsetTimeout(function() { XKit.extensions.mass_deleter.unlike_next_page(); }, 400);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tXKit.extensions.mass_deleter.unlike_next_current = 0;\n\t\t\t\tXKit.extensions.mass_deleter.unlike_next_page_url = response.getResponseHeader(\"X-Next-Page\");\n\t\t\t\t$(\".post_container .post\", m_div).each(function() {\n\t\t\t\t\tvar m_post = XKit.interface.post($(this));\n\t\t\t\t\tif (XKit.extensions.mass_deleter.unlike_likes_array.length >= XKit.extensions.mass_deleter.unlike_likes_limit) {\n\t\t\t\t\t\tXKit.extensions.mass_deleter.unlike_current_array();\n\t\t\t\t\t\tstop_action = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (!stop_action) {\n\t\t\t\t\t\tXKit.extensions.mass_deleter.unlike_likes_array.push(m_post.id + \";\" + m_post.reblog_key);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (XKit.extensions.mass_deleter.unlike_next_page_url == null) {\n\t\t\t\t\t//We didn't get the next page, so we're assuming this one was the last.\n\t\t\t\t\tXKit.extensions.mass_deleter.unlike_current_array();\n\t\t\t\t\tstop_action = true;\n\t\t\t\t\n\t\t\t\t}\n\t\t\t\tif (stop_action) { return; }\n\n\t\t\t\tXKit.extensions.mass_deleter.unlike_likes_page++;\n\t\t\t\tsetTimeout(function() { XKit.extensions.mass_deleter.unlike_next_page(); }, 400);\n\n\t\t\t}\n\t\t});\n\n\t},\n\n\tdisplay_error: function() {\n\n\t\tXKit.window.show(\"Unable to perform task\", \"Please try again later or file a bug report at the XKit blog.\", \"error\", \"
OK
\");\n\n\t},\n\n\tdestroy: function() {\n\t\tthis.running = false;\n\t\tXKit.interface.sidebar.remove(\"xkit-mass-deleter-sidebar\");\n\t}\n\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RjExQzlDMzgyMTRGMTFFM0IyMThFNEQ0NkQ3REQ0QzMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RjExQzlDMzkyMTRGMTFFM0IyMThFNEQ0NkQ3REQ0QzMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGMTFDOUMzNjIxNEYxMUUzQjIxOEU0RDQ2RDdERDRDMyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpGMTFDOUMzNzIxNEYxMUUzQjIxOEU0RDQ2RDdERDRDMyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgS2HqQAAAWWSURBVHjajFY7bx1FFD4zdx3Hju1r+/oR/MKBkioNKDUVBXQICsQvoKQAiY4GiV+AUtCgKKBQRSko6JBoEH8ABCkCcnydBDtyHndn5vB958yuLwiirO+uZ2dnznee35nw06c/hJkQYwhxEGIQDMSuELSolKxFiqrmolnzBHfmXJtKKvkpxiXnFvNpUrQUadMkFckt9ratiOYmNBAbo9hjYNL7OwYVlaAxS8E4C1QRidjmesQmFuIHaBcHEC+ZimEXJqihKjTHFOTOAMLE8qc+CAMsIj5/uAec41/kBLShEpyMtFhdJcCaEvUK0d7NK8S0T/gXTA+zRH1P6K4pH9peqaBNlE49u+tHm6VEMUmh4piVYsr1SO624NoEgzFtgmuganIc/czTNF7gx6oh/pUg0itptsc66CZC/7mIOye4h/waiKvrixr3HuJREVWkM8c+JY/a5Q9fk6nrx4++17qF6qtorwMCbeZIolwAmCiFEepRi+74Vz64LP9/Xfns9enX796/wRxDPtcJ7W5tSslIMYpGpseBxYfQt2/+AhiqhipAMrIUMEA1FFQA3zFuC+sg5fHPf0AA8rTItLMAmWCBLYXnotK8LjFefe/K4fGRPMc1mlu99vYXngAGkDsMRjPyNVPFXMxPeHJGXtp5WZ7vurS1nxPUDNrmflKTe0iiFb4qrCYHZMPBTN6/+KIvHV5Y6retLq70435+f7RHYZCD2CX6lLmhNQiRrk9gGPqPMNCl5fPSxr7vv/X5zV7otU++6sc3Pr7ug53hNjMKanl4zdN9qCMjRo0VlIX/MAJRRNz2VrZ91fHto6X5RR8/uXPsg4XzF+7/Oq4Ai1tMH/AV1M8JM23xZG9hEAAwicTINKW1DLHf7nDX9x88uLu5sunj0uXh5vLG4cNDH2/NbUpCFBC/RLfDBxaEYhGPhQpn0C9g/FfsuXZ+NDsziyWHJ0frw7Vqc1v9s760fnR6D4P52flRXPQErsmjXtu0CXCRsZ3QL3AR7NA2kdFTzk+Sx/nw+O7G0nq1IFfvri+uHZ0yiffX99pH2Imw4hN8AC9gGhK0simkF6udklKB6BYY2Z5pb51eOjgZbyx0AMnZRzbmR4dmwe7ydmJf4kctlpyW7GYH78jYJkosrRkBvMQBmtTeyo656HBtbvVfAKPzq2OzYHd5FwqptbDcihFU0uTSidJA+5i0tspIfkQTUqPHvSEBxifjUQfAIvSCmFsdPyTAzsIWm5plfqHQzHRVy1tGQRvgZ/a1wm7UkLAZLgAUeWGeyfPng4NzMuNyTx8/9sFsjgcndzG4eG4EmdLKhEILySJV3Vu1DnPr3a9JcYPonUrZYmorezqT3rz6Dhk+DhAokntsEnORHRyKN4Pmm7eu6iO4U6yIi04q3dFjwtQCm1aC8pZqlFsRmhw3hmugPJfuyVGDQbfIzspWOvXMYhUghXqW5jAlrIs4aJSnhRVIUiL9Eg0SEfpJ2hntPoPmdpa3maCg9TKBSLssUDWFrBsZ8eRaZUxT4KWMurOy2B1uPQtgaVtKC+kkiS4vUQdUUlUc+9s3vgx+yEAo+uNCT5l7w/mNhTP20pArE/BxcufeyW/3jT2d6Djb0vdcH+A7dDTkkvkTnaFIPSmUuj6Ev34f4+fVD8+lUqUHz8qkvSuMhNjU2BlK7gpNmnbCU8MgWnAb4op2bc/EYdvAOziLKNDd7KHiVGOdwFgKWCkZdjmTAACutnZq/EpZpVohvdXOK+hYmgxUpeaaGeD5btJL7QdTbbkJpe2OHjzQJK5GSuEQmmSqtyq5wE4DPWOadEYE6Vff+zZzdrho1I8vPEyksz4UJqrSSyvTezqSQfrxeEPpwX0vXbBrrbgFxblb/ysNwz+VsRueR3YEO9DwhF4PhjIt/cxJqn8LMAARHl/PPEs13gAAAABJRU5ErkJggg==","title":"Mass Deleter","description":"Mass unlike likes / delete drafts","developer":"STUDIOXENIX","version":"0.2.1","details":"Used to mass unlike posts or delete drafts. Please use with caution, especially Mass Unlike part is extremely experimental.","frame":"false","beta":"false","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/mass_plus.json b/Extensions/dist/mass_plus.json
new file mode 100644
index 000000000..ec5499cb4
--- /dev/null
+++ b/Extensions/dist/mass_plus.json
@@ -0,0 +1 @@
+{"id":"mass_plus","script":"//* TITLE Mass+ **//\n//* VERSION 0.4.8 **//\n//* DESCRIPTION Enhancements for the Mass Editor **//\n//* DETAILS This extension allows you to select multiple posts by once, by type or month. It also comes with visual enhancements for the mass post editor, such as selected post count and more! **//\n//* DEVELOPER STUDIOXENIX **//\n//* FRAME false **//\n//* BETA false **//\n\nXKit.extensions.mass_plus = new Object({\n\tapi_page_length: 20,\n\trunning: false,\n\tpreferences: {\n\t\tsep0: {\n\t\t\ttext: \"Experimental features\",\n\t\t\ttype: \"separator\"\n\t\t},\n\t\tenable_search_tags: {\n\t\t\ttext: \"Enable Search By Tag\",\n\t\t\tdefault: false,\n\t\t\tvalue: false,\n\t\t\texperimental: true\n\t\t}\n\t},\n\trun: function() {\n\t\tthis.running = true;\n\t\tif (document.location.href.indexOf('://www.tumblr.com/mega-editor/') !== -1 && $(\"#nav_archive\").length > 0) {\n\t\t\tif (document.location.href.indexOf('://www.tumblr.com/activity') !== -1) {return; }\n\t\t\tXKit.tools.init_css(\"mass_plus\");\n\t\t\tXKit.extensions.mass_plus.do();\n\t\t\tsetInterval(function() { XKit.extensions.mass_plus.do_headings(); }, 2000);\n\t\t\tXKit.extensions.mass_plus.do_headings();\n\t\t}\n\t},\n\tdo_headings: function() {\n\t\t$(\".heading\").each(function() {\n\t\t\tif ($(this).find(\".xkit-mass-plus-buttons-month-inside\").length > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t$(this).append( \"
\";\n\t\t$(\"body\").prepend(m_html);\n\t\t$(\".xkit-mass-plus-buttons-month .xkit-mass-link\").unbind(\"click\");\n\t\t$(\"a.brick\").click(function() {\n\t\t\tXKit.extensions.mass_plus.update_count(true);\n\t\t});\n\t\t$(\".xkit-mass-plus-buttons-month .xkit-mass-link\").bind(\"click\", function() {\n\t\t\tvar m_type = $(this).attr('data-type');\n\t\t\tif (m_type === \"help\") {\n\t\t\t\tXKit.window.show(\"Mass+ Help\", \"Welcome to Mass+, enhancements for Mass Editor. Use this menu to select from all the visible posts. Unfortunately, the Tumblr limit on editing posts at once is 100, so Mass+ can't select more than 100 at once.
You can select the first 100 posts, deselect all or select by the type of the post. In order to select all posts, you might need to scroll down and let more posts load.\", \"info\", \"
OK
\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (m_type === \"search-tags\") {\n\t\t\t\tXKit.window.show(\"Search by Tags\", \"Please enter the tag to search for: You can only search for one tag at a time. The first 100 results will be selected.\", \"question\", \"
Search
Cancel
\");\n\t\t\t\t$(\"#xkit-mass-search-for-tags\").click(function() {\n\t\t\t\t\tif ($.trim($(\"#xkit-mass-search-tag-txt\").val()) === \"\") {\n\t\t\t\t\t\tXKit.window.close();\n\t\t\t\t\t}\n\t\t\t\t\tXKit.extensions.mass_plus.search($(\"#xkit-mass-search-tag-txt\").val());\n\t\t\t\t\tXKit.window.show(\"Please wait..\", \"Searching for tags, this might take a while..\", \"info\");\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (m_type === \"select-all\") {\n\t\t\t\t$(\"a.brick\").removeClass(\"highlighted\");\n\t\t\t\t$(\"a.brick:lt(100)\").addClass(\"highlighted\");\n\t\t\t\tXKit.extensions.mass_plus.update_count();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (m_type === \"deselect-all\") {\n\t\t\t\t$(\"a.brick\").removeClass(\"highlighted\");\n\t\t\t\tXKit.extensions.mass_plus.update_count();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (m_type === \"private\") {\n\t\t\t\t$(\"a.brick\").removeClass(\"highlighted\");\n\t\t\t\t$(\".private_overlay:lt(100)\").parent().addClass(\"highlighted\");\n\t\t\t\tXKit.extensions.mass_plus.update_count();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar m_sel_count = $(\"a.brick.highlighted\").length;\n\t\t\tvar n_sel_count = $(\"a.brick.\" + m_type + \":lt(100)\").length;\n\t\t\tif (m_sel_count + n_sel_count > 100) {\n\t\t\t\tXKit.extensions.mass_plus.show_100_error();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar m_selector = \"a.brick.\" + m_type + \":lt(100)\";\n\t\t\t$(m_selector).addClass(\"highlighted\");\n\t\t\tXKit.extensions.mass_plus.update_count();\n\t\t});\n\t},\n\tsearch_page: 0,\n\tsearch_url: \"\",\n\tsearch_last_timestamp: 0,\n\tsearch_found_count: 0,\n\tsearch_found_posts: [],\n\tsearch: function(tag) {\n\t\t// Get the last timestamp:\n\t\tvar last_brick = $(\"a.brick\").first();\n\t\tvar last_brick_classes = $(last_brick).attr('class');\n\t\tvar last_ts_start = last_brick_classes.indexOf('timestamp_');\n\t\tif (last_ts_start === -1) {\n\t\t\tXKit.window.show(\"Could not fetch tags\",\n\t\t\t\t\"Error: 100 - timestamp not found.\",\n\t\t\t\t\"error\",\n\t\t\t\t'
\");\n\t\t\treturn;\n\t\t}\n\t\tXKit.window.close();\n\t\t$(\"a.brick\").removeClass(\"highlighted\");\n\t\tfor (var i = 0; i < this.search_found_posts.length; i++) {\n\t\t\tif (i >= 100) { break; }\n\t\t\t$(\"#post_\" + this.search_found_posts[i]).addClass(\"highlighted\");\n\t\t}\n\t\tthis.update_count();\n\t},\n\tshow_100_error: function() {\n\t\tXKit.window.show(\"Trying to select over 100 posts\", \"This action would result in more than 100 posts being selected, so Mass+ can not continue. Please deselect some posts, or click on Deselect All on top to continue.
This is a Tumblr limitation. For more information about this, please click on the \\\"help\\\" link on the top left corner of this page.\", \"error\", \"
OK
\");\n\t},\n\tupdate_count: function(from_click) {\n\t\tvar sel_count = $(\"a.brick.highlighted\").length;\n\n\t\tif (sel_count) {\n\t\t\t$(\".editor_navigation button\").removeAttr('disabled');\n\t\t} else {\n\t\t\t$(\".editor_navigation button\").attr('disabled', 'disabled');\n\t\t}\n\n\t\t$(\"#xkit-mass-count span\").html(sel_count);\n\t\tif (sel_count === 0 || from_click === true) {\n\t\t\treturn;\n\t\t}\n\t\tif (sel_count === 100) {\n\t\t\tXKit.notifications.add(sel_count + \" posts selected.\", \"ok\");\n\t\t} else {\n\t\t\tXKit.notifications.add(sel_count + \" posts selected. You might need to scroll down to load more posts.\", \"ok\");\n\t\t}\n\t},\n\tdestroy: function() {\n\t\tthis.running = false;\n\t}\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpGNzdGMTE3NDA3MjA2ODExODA4MzkyMjM2MzU5MTQ4NCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpBRTdBNjZFQjM4NjcxMUUzQTFDQUFDOThEMTlDRUY3OSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpBRTdBNjZFQTM4NjcxMUUzQTFDQUFDOThEMTlDRUY3OSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkY3N0YxMTc0MDcyMDY4MTE4MDgzOTIyMzYzNTkxNDg0IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkY3N0YxMTc0MDcyMDY4MTE4MDgzOTIyMzYzNTkxNDg0Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+ZPtM9wAAAYhJREFUeNq0Vs1KxDAQ7rTT1MoWERXxKPoEPoMnX0F8Bj0u/pzWBY/rxRfwHQTBR1E8ioinikWXNkaFdJbNbKa0nUNJPjLfdL5MJoF8bxz0aRiA7jlAVPUbAMKeM9Bh6V308p078S2VCSSKBRlwKgp8ESL/ohDdayS+qNGfgGZUlPiaKnL/xeDusp7sn5jP7sPEAo9/yOB+ZJGPg3MuA8EeRH6E40GIRafFi3A8qAWVoJUAYXggPzy1k9evz04O12ayTCRSdZFD1U3boJxYku3SZLxze23HT0fHQuTfKKfJgESuuD9qhtDxTJlqphLm8cUI5cQoIS1Bg7tVKGiEUE7Ih0M7eSuKTjZ5I03JgVGkfsugGyOcM81uPVuy4+ziyo6fz347z/Z4sgDJR7USummrAAQ/wrWKQIE/QAJehOMR3Wjzfd9xE7C96GboDfBeTJ34WurXVyYRV10CXyORYJOnDJHA11SRIAMM3XgsyYBxpra6oto8HXt92BmJBBm0ezoKdGxjPwIMANdcZlZzJu/lAAAAAElFTkSuQmCC","css":".xkit-mass-plus-buttons-month {\n\tdisplay: inline-block;\n\tfont-weight: normal;\n\tfont-size: 11px;\n\tmin-width: 700px;\n\ttext-align: right;\n\twidth: 100%;\n\theight: 35px;\n\tline-height: 35px;\n\t-webkit-box-sizing: border-box;\n\t-moz-box-sizing: border-box;\n\tbox-sizing: border-box;\n\tborder-bottom: 1px solid rgba(0,0,0,0.22);\n\tpadding: 0px 15px;\n\tposition: fixed;\n\ttop: 45px;\n\tleft: 0; z-index: 100;\n\tbackground: rgba(255,255,255,0.86);\n}\n\n.xkit-select-option {\n\twidth: 21px;\n\theight: 34px;\n\t/* background: red; */\n\tmargin-left: 4px;\n\ttext-decoration: none;\n\tbackground-size: 24px 24px;\n\tbackground-repeat: no-repeat;\n\tbackground-position: 50% 50%;\n\topacity: 0.66;\n\toverflow: hidden;\n\tline-height: 400px;\n\tfloat: right;\n}\n\n.xkit-select-option:hover {\n\topacity: 1;\n}\n\n.xkit-select-option.text {\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAYAAABWk2cPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDZGNjZFRUYxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDZGNjZFRjAxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0NkY2NkVFRDFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0NkY2NkVFRTFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsJAvbIAAAGdSURBVHja7NbJK0VhGMfxY8otKUMyRIaNlLmrEEIiEaJY8xdYsFOUlViwtbNhK5EpEkrpWiArC5GFoRQbynB9T/3U6aTc18JQ561P5z3vGZ73fd7ndG9YMBi0frqFW7/QvKBe0P8bNPKzQb/f7x4aRSneMIZdkyCBQODroK6WjkFE6/zONOh30tviCGi3RiSYZs80aLeO27hEChpc98RhGJs4xg7GkfOdoLmoVH/CkdYe18pmMYI6TaoKA1hEomnQDvhwg3WsabxWL7dUYM2wfzl6kYV6PCJP10MOGoEu9TfwpJk/aE9bde0M5ZrIMjJR6Hh3tEnQIpSof41q5ONcY5063iIeQ9rzQ0w6CipoUmldjuv94mw1SEUalrSABczjAnNIMinvKLSpb8/+RPe+KV0ViEGTXmwH3Ee7nslGrOk3ValUWkrbjGuv91CmbGxpPEOTsFTJPvWfQ93TPh1fVETO9opV9e1iOsWRUr0i97jSPQWhrnRa396D0utuU/pmP9LaoFUn40BVXqzzO/fDYd4fMy+oF/TPB30XYAA/FlCkcqgrRwAAAABJRU5ErkJggg==);\n}\n\n.xkit-select-option.photo {\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAYAAABWk2cPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDZGNjZFRjMxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDZGNjZFRjQxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0NkY2NkVGMTFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0NkY2NkVGMjFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PklZnYUAAAF6SURBVHja7JXNKwVRGIfdcRVKIhHJSmQhKWwslBUbWSibG9a3lIWVjaIsxNLKBkluyVcs/AEiO8nGQjefC2woF8V4Tr3qNM3cc+c2WZ23nuZ89f7m954zZ2Ku6xb8d8SsqBW1opGJXgw1qUcdVMlQDaxCuWfpFyThUvqvkG7duvLNGze81CgsaKJBUQobWv8TZmDOb7FjSDYfIJiGTVjT3Km4gWm4htmgpCanFZ6+cjAJO1ALhXAPHbACB+LwGZbyFf3R2mrzE+LyENpk/A7GoQ/WpaQD2ZLGQxy6bTiFc6iUsQyUifMeSMGUKZETQlQdlDERfJMyt0CzuFRHfRe+TYnCOH2AYWmPiMBfHMmzEd7FfSROlcMnOPYI6qHEiqN0OgjLcJtljSpzUZR7mhAniwHzqrQTuSRyQsyXyGHq91nXDXtQnYuoqbyP0KD11d27D2dwInduO/T6GMjkK5qUctZ73HdClzb24flUXrJdg/Z/akWtaKj4FWAAOdZxVglFqeYAAAAASUVORK5CYII=);\n}\n\n.xkit-select-option.quote {\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAYAAABWk2cPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTgwREFEQzYxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTgwREFEQzcxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0NkY2NkVGNTFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0NkY2NkVGNjFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pp21znIAAAFvSURBVHja7JXNK0RRGMZdH5OSmgk1ZWEjCmUjElnNjiysmFKSBRZIFlZWNpKNz0lCdoqUlSWK3Sws+CuoSdJQXL9T7+J2u+eYMyarc+pXz9z3ueeZ9517z3i+75f99/JcqAt1oSUJzWW8qMt90A77v+yrPCnYjk/7X+FipcUXHIc9qIFPONb4BuEIGqAWVsOG8gIDF+FEAs/gRuNLw4UEXsNllKmQTqdgQ/QmLEDUbzIkHVbBKUzCezGhvbAlWm00r/E1y7hjMoUJyOs2NY03Jp1VwwvM6R5GmUQdfIgvb+rEFDoCXaIrYA1mIRHy9cOwaDX2ZViCxmJC0wEdl5HtwC20BGqjAa2mMgbrcAc9tqGdmusdsBu4t1vja4JD29CEoTYAraLrDb4229A3Q029FknRr7bHoCn00VBTR9uz6GwpQzOG2hU8iT6Ab40vaxt6DisR75w63makW7Xu5XMu5HuQJ979n7pQF/q39SPAAIOXa93gNF/cAAAAAElFTkSuQmCC);\n}\n\n.xkit-select-option.link {\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAYAAABWk2cPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTgwREFEQ0ExQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTgwREFEQ0IxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBODBEQURDODFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBODBEQURDOTFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Puk0h+sAAAGqSURBVHja7NZNKARhHMfx3fVyQF6Kg7eUXLQHysUmL+HgtUjhILJRilyk3F04SHJyUBJyk1YSeYkktZID2igHB29Rsl4Om/Wd+h+mzczq2XLYdurT7Owzz/x2Zv7Pv7X6/X7Lf2/WSGgkNDxDG9dHAr8qQyccyIIN93BjEWv6k111Y79eN/qPPy4RE3BKkH7LE+1YQT/uzC5m+0NgElbRY3L+u+ybsSVPIaTQSVQYjO2hCKmowTXsmEOMamg5ug3GHtCCLwziCB1yXIVW1VCnydg2XrCEcUzhGLcy3qsa6jAZ0yo2Bbl4xT5ikSDjBUYTg1VvRsDxE3ZQDK8UUCU8eMMo0uXcZNVQ/ZPYlWXxKJ+1dxeFOPShXmog6BYsVAvIgQ8DSJPlU4ghaRYbBnO9qu/0VPYfuECbPNpvXEq40eZRvdN5NCEepZhGNg7wiQaTuQuqd+rCpry7GQnU1u2yFE2JwbxzzKreqU+KRAvOlwZwJZWZaTDnGV1Szcpt8Aa1unVoNwk8k3Z4EmrvtUhPrZYucyjNQN/stYIbliXjjvxziISGb+iPAAMAcz18wE4/HnIAAAAASUVORK5CYII=);\n}\n\n.xkit-select-option.chat {\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAYAAABWk2cPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTgwREFEQ0UxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTgwREFEQ0YxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBODBEQURDQzFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBODBEQURDRDFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pmc6aAoAAAEzSURBVHjaYvz//z8DvQHjqKWjlo5aSjVL7ebf4AZSnUAcAsS8BMz6DsRHgLgUiG+DBA4lamBVyELAoG4gziTSA1xA7A/EfEDsCsR/cSlkImBQJBmhZwK1mIFcS7nJjTZ8koSC9x8S+xkQswKxKJT/GIhBCYIDGpSSSHp+UOJTZNABxLOB+A+UfwaIzwFxL1QOBniA2IdalrIB8UpQogbi+UD8E4jfQX3KhqSOGSofQQ1LfwGxIxAXAPF6IL4FxWZAbIAlJbuRG6fI4BsQqyPF3R9o3AkDMTua2hVAnE0NS52AWASIpYDYC4jloBa/gQY1DHwF4lxoYUGWpchJPwqJrYxHz1+kxEZWnJJTMDMRMpeQpdfIsPQ9pfm0BIhfkWAhKG5boYlutD4dtXTUUuoAgAADAGzGZBT0+yuKAAAAAElFTkSuQmCC);\n}\n\n.xkit-select-option.audio {\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAYAAABWk2cPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RDAxMTc2OTExQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDAxMTc2OTIxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBODBEQUREMDFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpEMDExNzY5MDFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmgJCVkAAAGISURBVHja7NY/KEVRHMDxd3kxyKoMMmCxeFneoje8wSBiMOgVykCkPEYyUCYDBgsRr2SUwkKUyeDPYDBICovVS/l/fU/9bp1u7nvvnluk7qlPt/On8zvn/s49Xcu27chvl6LIH5QwaBj0/waN5upcTx+7m6rRj1bUyKIfcIhlnOmDe+cTgXfajUuM4x2bal14xABOMV3InFEfATO4RjuOXP2NWMAkyjEaNKe1WMQdkj8EVOUcLThBGm1Bg47J6kckf14li2Goy3wi19z5gpahAzfYLmCB6iAdII4606DqhFbiAmuY0foqUKXV1anelbyrkjANmpFnJ3rQrPWlUK/Vk5LXIanPmQZtkPyoyT6Ec+q78KzN8abtOCWpMT5I+3KQ1NgvaYsL9bpnpc35G9iTlBh/p69YQkzqn/JswpXkbVXaLHnuaOONd6pP4EysLoJB3GPLtdNY0Au/1GP8C0rkKnzye6Xme71Tkp9i9Ln6brGi1Z1XvyEHLOs1qRX+DYZBw6B+yrcAAwC9FkublkrqIgAAAABJRU5ErkJggg==);\n}\n\n.xkit-select-option.video {\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAYAAABWk2cPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RDAxMTc2OTUxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDAxMTc2OTYxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpEMDExNzY5MzFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpEMDExNzY5NDFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PlXaRegAAAFvSURBVHja7NbNKwRxHMfxXYsL+QdwEScHBxlyVPKQEkkO/oF18XwQKSSHvbg5c/TwH9iLXLQlFwc5SFKK5CGUxXp/63PYNjvGzoTDfOvVtL+Znc9vfvOd2Y1mMpnIb1dR5A8qDA1DA6lit53x6UXb9GEG9bjCOpbQhBU4eMIOZnFnX1pLzBcWSnViCzF9rsGCJtCKKo2XYwSVGMBbwVdKTWQFWp2hDIM5x9kKvKAXLdj3c0+rtb3FPcZxrDF7lV1rOW0tdzVe57eRzrXdQDse0KixKJLoQQodGj/x1UhUAm0YQ5euInuiQ2jWvSzFNg78hibVTHNowA3ec46pwCU2sfzF/h+H1mq54jp5vrJuvcCj+mAUU4WGnmprs/9wOc7u76GWehX9bqHfNZKjk9ljU+LCJp/GsAJ9LW9Kj4uXcvTCCOTdG/MYalf6HFSo1x+FI3TjNYgTpj2G2nO6h0l1cf6uC/+YhaFh6L8P/RRgAJzXR6+2XwoJAAAAAElFTkSuQmCC);\n}\n\n.xkit-select-option.ask {\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAYAAABWk2cPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6M0YwNkY2NzkyNjEwMTFFM0E4QURBMkY5NDVFMjREMzgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6M0YwNkY2N0EyNjEwMTFFM0E4QURBMkY5NDVFMjREMzgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozRjA2RjY3NzI2MTAxMUUzQThBREEyRjk0NUUyNEQzOCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDozRjA2RjY3ODI2MTAxMUUzQThBREEyRjk0NUUyNEQzOCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmiD5J8AAADXSURBVHjaYvz//z8DvQETwwCAUUtHLaUKYCFGkYmJCYwpAMQOQGwA5R8A4gtA/AHEOXPmDPUshQKQRRuAWB5JrB6IHwJxANRyqgavANRXMAs/IsnJQ+UEqG1pAhDzQ9kboRYIIlnODw12qlpqgMSeAKU/oAWpAFUTEtSiBVD2BSTf2yOpuUBtSy9gCe75SPyFtEhIyEABzcJGqCNoWjgEoFnYQI8SCTnBHKBZiYQGNiBZdoEcS8nxKSgl74dig+FV4OPJPh/IsZRxtGE2aumopYPeUoAAAwBfSihME+bbPgAAAABJRU5ErkJggg==);\n}\n\n.xkit-mass-plus-buttons-month-inside {\n\tdisplay: inline-block;\n\tfont-size: 11px;\n\tfont-weight: normal;\n}\n\n.heading {\n\tpadding-top: 6px; font-size: 13px !important;\n\tborder-top: 1px dashed rgba(0,0,0,0.32);\n\tmargin-top: 12px;\n}\n\n.xkit-selector {\n\t/*height: 35px;\n\tborder-left: 1px solid rgba(0,0,0,0.32);\n\tmargin-left: 0 !important;\n\tpadding: 0px 8px;\n\ttext-decoration: none !important;*/\n}\n\n#xkit-mass-count {\n\tfloat: left;\n}\n\n#xkit-mass-count span {\n\tfont-weight: bold;\n}\n\n.xkit-mass-plus-buttons-month-inside .xkit-mass-link,\n.xkit-mass-plus-buttons-month .xkit-mass-link {\n\ttext-decoration: underline;\n\tmargin-left: 15px;\n\tcursor: pointer;\n\tdisplay: inline-block;\n\tcolor: rgb(150,150,150);\n}\n\n.xkit-mass-link.xkit-no-left {\n\tmargin-left: 0px !important;\n}\n\n.xkit-mass-plus-buttons-month-inside .xkit-mass-link:hover,\n.xkit-mass-plus-buttons-month .xkit-mass-link:hover {\n\tcolor: rgb(90,90,90);\n}\n\n.xkit-mass-plus-buttons-month .xkit-mass-separator {\n\tcolor: rgb(170,170,170);\n\tdisplay: inline-block;\n\tmargin-left: 25px;\n}","title":"Mass+","description":"Enhancements for the Mass Editor","developer":"STUDIOXENIX","version":"0.4.8","details":"This extension allows you to select multiple posts by once, by type or month. It also comes with visual enhancements for the mass post editor, such as selected post count and more!","frame":"false","beta":"false","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/messaging_tweaks.json b/Extensions/dist/messaging_tweaks.json
new file mode 100644
index 000000000..624bef737
--- /dev/null
+++ b/Extensions/dist/messaging_tweaks.json
@@ -0,0 +1 @@
+{"id":"messaging_tweaks","script":"//* TITLE Messaging Tweaks **//\n//* VERSION 1.8.3 **//\n//* DESCRIPTION Helpful tweaks for Tumblr IM **//\n//* DETAILS This adds a few helpful tweaks to the Tumblr IM, for example minimising the chat, hiding the IM icon or changing the looks of the chat window. **//\n//* DEVELOPER New-XKit **//\n//* FRAME false **//\n//* BETA false **//\n\nXKit.extensions.messaging_tweaks = new Object({\n\n\trunning: false,\n\n\tnotification_sound: \"data:audio/wav;base64,UklGRtRzAABXQVZFZm10IBAAAAABAAIARKwAABCxAgAEABAAZGF0YbBzAAAIAAAA6//k/97/8v/x//z/AgDw/+r/5f8QAAUAFgAGAPj/BgDy/+T/AwD6/+P/5P/g/+3////4//r/8//7//H/HAAIAAMA/v/t//H/AwD///H/9//X/+3/7P8AAAEA/P/o/+r/CAADABgACQD6/wYA7f/r/wAAAQDj/+//3v/0//v/+//1//L/2//a/wYA+P/3/+3/4v/l/+n/4//q/+j/wf/J/9n/7P/v/+T/4P/b/+n/6/8GAPr/6f/z/+H/2f/l/9X/4P/j/+v/5f/c/+D/6P/p/+T/3//V/+D/xv/V//H/6f/d/97/5v/k//P/6v///+7/0//X/+3/6P/f/93/xf/T/9P/2f/t/+j/1//d/+v/5f///+z/7f/f/9n/1f/w/+f/1P/T/8L/1P/l/+H/7f/e/9v/1v/6/+v/+f/p/9r/1v/m/+H/5P/k/7//0f/N/9L/7v/k/97/4P/h/+T/BQD1/+7/6//V/+D/7P/m/9v/3P/F/9L/3v/e/+r/5//c/9r/+f/v/wkA7f/j/+D/6f/r//D/6v/T/9//yP/Z/+//6//v/+z/6//n/wcA8/////7/6P/k//L/4P/r/+v/z//e/+L/8//8/+z/5f/d//r//v8IAAAA7v/v/+v/6v////b/4v/k/8r/2//1/+7/+f/1/+r/7/8JAAIAAgAFAOn/8//3/+P/+P/z/9X/2//f//f/+//z/+3/4P/w//T/DQAFAPP/9P/t/+3/+//5/+X/5P/O/93/6v/v/wAA7//o//T/AAD6/w4AAwDv//v/8f/n//D/8v/d/+X/1v/x//n/+P/s/93/9P/z/w4AAwABAP7/6//t/wIA9f/2//H/1P/f/+f/8P////r/7f/0/wMA8f8aAAcA+f8DAPb/8v////T/7f/y/9z/6f8CAA4A9//p//b/+P8SAAIACwAMAOv/8f8IAAMA+v/3/+b/7v/o/+7/EAAGAPb/+/8EAAgAIgALAAoAEgD5//D/DQAEAPX/+//j//j/AgAMAAoA9f/6//f/FwALAB8AFAD9//r/DAAEAAcACADq//X/5//0/xAABgD+//n/BgAFACIAEQAPABoA+P/4/wwA+f///wMA5v/x//7/EQAMAP7/9//7/w8AEAAkABEAAwD//woA/v8NAAcA8P/3/+f/9/8IAAIACwAIAP//BgAiABUAFQAVAPn/BgAJAPX/BgAJAOX/8f/9/xEAEQD//wEAAAAJAAYAKgAaAAQAAwAFAAQAEAAFAP3/BADk/+3/CgAJAA8A//8HAAsAHAAJACcAJAD8/wQADwABAAsAAgD0/wAA8/8EABgAEAADAPL/CwANACsAEQAXABEABAABABEAEgD+/wgA5v/9//r/BwATAA0ABQAGAB0ADQAsABwABgAOAAsAAQAQAAoA9/8DAO3/BgAUABoACADy/wwAEQAlABcAGwAjAAIAAQAYABIABQAIAO/////3/wEAGgAWAAUABwAYABgALAAcAAwAIQADAP//FQAOAPz//v/w/wAADgAXABAAAAAFAAUAIwAbACIAHQAAAAgAFQAOABAACwD4/wAA9v8CABgAFQAJAA0AEAAWACgAHAAVACoAAAADABkADQAEAAQA9v8MAAQAEgAVAAsAAAD5/yIAGwAnAB8ACQAQABAACwAWABMA9v8EAO7/BwAOABQAEgAUAAsACQApABsAGgAnAAQABwARAA4ACAATAOr/AwAEABsAGgAHAAoAAwAYABAALwAgAAAACwASAAgAGAASAP7/BwDu/wUADgASABYADgAMAAkALgAXAB8AJgAJABMADQAGABQAEQDw//3/+v8VABsACwAJAAcAEgAQADIAIwAOABMACAANABsAEQAGAA4A4//9/wgAEQAbABkABAAUACEAEgAtACQACAARABgA+f8cABYA/v8BAPb/CwAaACEABQAGAAwAFAAvACAAHQAZAAgABwAZABMAEQAOAPL/+f8FAAgAIwAVAA8AFQAbABIAOAAjAAkAGQAQAP3/FwANAAIACADy/woAFgAfABMA//8LABEAKwAbABoAGgAMAA0AFwAQAA0AEADz//z///8KABcACwANABQAFQATAC8AKgANACIAAwAIABcACwAFAAYA6////x4AKwAxABsAFgAbADoALQA6ADIAGQAhACsAHAAqADQACwAhAAQAFQAuAC0AIAAkAB0AHwBCADgAKQA/ABwAKAAoACEAJQArAAYAGAAcACsALwAZAB0AHQAxACwARgA0ABoAKAApABsAMAAsABEAHgAFACAAKgAlADEAJQAiACYARgAzADIAPAAkACYAJwAaACYALAAEABEAHgAzADIAJgAfABsAMQAzAEkAOQAqACsAIgAgADcAMwAWABkADAAXACgAKQA0ACkAJgAhAEUAKwBBADwAIwApAC4AGwAjACUADwAcABMAKQAvAC4AHwAUACkALgBCADEAJwArAB4AHQA2ACoAEAAZAAQAFAAaACAALgAgABkAJAAvACsAPgAuABwAIwAjAA8AKAAhAAoADAALACQAHwAjABkADQAZAB8ANQAnACMAJQARABQAKgAhABUAEAABAAsABwARACoAHQAXABoAJAAaADIAMQAVACYAFQANACIAHAAFABMA+/8WABoAJgAXAAgAFwATADAAIwAzACQADwATABsAGQAZAB8A/P8JAAQAFwAeACEAEwAdABQAHQA1ACsAIwArABEAEAAeABAAEQASAP7/EQAWACYAGQAMABEADwArACYAMAAmAA8AFAAcABgAIQAUAPr/CAD6/xMAFQAPABcAEQASAA8AMgAlAB8AKgAJABQAHAANABAAGgDu/wEADAAWABkADQAHAAIAFQAeACcAHAAIABQAEAAJABgADAAAAPz/9f/9/wsACQAYABAABQALACQAHgAYAB0AAQAQAAkA+P8NAAsA7P/0//r/EgAOAAgABQD//wkACwAqABYAAgAKAAMA/P8UABEA+v8AAOb/+f8AAAcADQAJAAAABAAcABMAIAAZAP3/AgAFAPn/EAAMAPP/9f/p/wYACQAOAAMA+P8JAAsAGAAHAA8ACAADAAcAEgAOAPX/AgDm////+/8MAAYABQD7//n/GAAVACYAHQD+/wkAAwD3/xUACwDz//X/4f8DAA0AFQAFAPT//v8AACIAEgAYABUA8v/5/xAADQABAAYA6P/0/+7/+f8LAP//AwAHABMAEAAaAA8A8f/5/+X/3f8AAPX/FQAgAAIAFQD0/wMA+v/p//b/8v8cAA8AFwAJAP7/AQADAP//AQD//+f/8v/w//z/CAAMAAMADgAHAAUAHwAGAAgABQDz//L/CgD8//L//f/h//j/8/8NAAcA/P/2//X/EwARABYADgD2/wAA+//2/wcAAQDm/+n/5f/4/////P8FAAYA+P/4/x0AEwAJABUA9f////3/9P/5/woA1P/q/+z/DgD///f/9v/z/wQAAgAgAA8A+f/7/wMA+v8NAAIA7f/z/93/8f/5//7/BQAAAPf///8UAAsA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XQFSAW0BYgFTAWIBRgFVAWIBZAFtAWQBWwFfAXcBagFtAW8BWwFiAWgBYQFiAV0BSwFWAU8BZwFlAV8BWwFXAV8BYAF9AW8BaAF0AVgBUgFnAV0BWAFZATsBUwFUAWMBXwFhAVcBWgFuAWIBegFsAVYBUgFgAV0BYwFfAUQBUwFFAVMBagFoAVkBTwFdAVQBfwFlAWQBbAFVAVEBYwFRAVoBVwE8AU0BSQFVAWYBWAFZAVcBXwFeAXUBaQFXAVsBWQFSAWMBXwFOAU8BOgFWAVcBXwFdAUoBWwFVAXQBXgFrAWQBUQFbAWEBSgFPAVQBPgFIAUQBUgFjAVEBUgFYAVoBXAF1AW0BWAFXAVUBUgFjAV0BTQFSATwBSAFWAV0BXgFQAU4BTwFqAWUBdQFvAVMBWQFTAUUBTQE9ASYBMAEmATwBTgFGAUEBQQFAAUABXAFNAUYBRAE4AT0BQgFAATgBQAEjATcBOQFQAUUBPAExAS0BTAFAAVYBSAE8AUUBNwEtAUMBPwEoATsBJAE3AUIBPgFGATwBOwE2AVgBSgFKAUABMwE2AToBPAE9ATwBHQEoAS8BQQFCATsBNAEwAT4BOgFYAU0BNwFBATgBMAE4ASwBOQE8AT4BOwE1ATwBNwE3ATgBNgEiAS4BFwEpAT4BOQEtATIBOgE5AUcBPQFOAUIBIwExATsBOQEzATABHAEtASYBMQE8AT8BLAExAUMBOQFUAUEBPQE4ASsBLgFFAUABJgEuASEBMAE9ATkBPQE3ATEBMwFQAUABVAFEATgBOAE7ATYBOwE+AR4BMgEnATcBQwFFATYBPQE5AT0BWQFDAUwBRQE0ATUBSQFDATUBNAEiATIBPwE5AUQBPwE7AToBUQFIAVcBTQE7AS8BSAE5AU0BQAEoAS8BIgE4AUEBQwE/AUIBOQE+AVwBSwFLAVABOQE7AUQBMQE/AT8BHwExATEBQQFIAUQBLwEwAUkBPwFbAUsBPgE8AT8BMAFIAUIBKQE1ASQBLwFDAT0BQwE5ATUBNgFUAUkBTwFWAS8BOwFAATQBPwFGASABKgEoAUEBRAFBATkBLgFCAUsBWAFPAUEBSAE4ATUBQgFGATQBPgEZASoBOQE5AVEBSQE8AT4BTgFLAVYBWQE/AVABQQE3AUYBQwEtATwBKAE9AU8BTgE8ATgBRQE9AV4BUAFKAVYBOgE/AVEBRgE9AUABKwE8ATgBQQFQAVEBPAFBAU4BSgFnAVsBSAFTAUMBPAFOAUUBOQE2ASwBPwFNAVMBRgE5AT8BQwFdAVUBVgFPAT4BQAFQAUQBRwFDATABOQE1ATsBUQFLAUIBOgFOAUkBZgFXAUsBVAFFATwBTgFEATcBOgEqATgBQQFVAUwBPAE8AUIBUgFOAV4BUwE8AT8BSwFBAUsBSgEpATkBKAE7AUsBSAFCAUIBQgFFAWEBVAFTAVcBPgE3AVIBOAFAAT8BJgE3AT8BVAFNAT0BOwE4AVMBSAFjAVIBPgFIAUABPwFQAVQBLQE2ASsBOwFHAUUBSgFGAUMBQwFhAVABWgFZAT0BRwFHAToBRwFFASsBMQE4AUsBTwFEAT0BNgFLAUgBZgFPAUcBSQFDAT8BUAFIATsBOgEmATcBQgFGAUYBRQFBAUQBWgFMAV4BXQE+AUgBRwE8AU4BSgEvATQBLgFFAUwBRAFLAS8BRAFGAV4BVgFBAU8BQQFBAVIBSQE9AT0BKAE7ATIBPwFXAU0BPwE+AVMBTwFaAVgBOQFSAUQBNgFGAUEBMwE5AScBNwFPAU4BSQEzAToBRAFbAVQBSgFJAUIBPwFQAT0BQwE/AScBLgEtAToBVwFLATwBPQFKAUoBXwFTAUABTwFCATkBRgFAAS4BOQElAT4BQQFPAUkBNQE9ATwBVwFOAVIBTgEzATkBSwFFAT0BRAEjATIBKQE7AUABTgE2AUMBPQFLAVkBTwFJAU8BPAE3AUgBPwE3ATUBIgE6AToBRAFJATMBOAE0AVIBSAFaAUoBNwFHAT0BPgFDAUYBJAEuASgBNwFCAUIBQAE/ATkBOgFeAUwBSgFRATsBNQFDATMBPwE9ARsBMgE4AUkBRwE5ATcBNgFJAUIBWgFQATYBOwFDATYBQQFCAS0BOQEfATEBPQE9AUUBQAE5AToBUgFOAVABVAEyAT4BQAE4AT4BPgEiASsBLwFCAUgBPQEzATABQwE9AV4BSQE7AUYBNwE6AT0BQAEuAT0BHAEqATcBPwFHAUEBLgE1AVABRgFSAUwBMQFBAToBLAE6AToBIgEvASABOQE9AUEBNAEnAToBNwFVAUkBQgFGAS8BMQE9AUQBMgE0ARYBJgEpATEBQQE8AS4BMwFAAT0BUwFGAT0BSgFNAUYBTgFNATYBQgEvAUMBVAFXAUcBOgFHAU8BYwFZAV8BWwE9AUIBUgFTAUMBSAEqAT8BMwE/AVgBVAFGAUgBWQFYAWoBXQFOAVoBQwE1AVUBRwE6AT8BLgFDAUYBWAFOAUABQgFGAWABXQFgAVkBQwFJAU8BTgFJAVABMQFBATEBPgFTAVABRwFGAU0BUQFiAVsBUgFhAT4BOgFUAUcBQAFFATIBQwFCAVABVQFHAT0BPQFcAVwBYAFWAUYBTwFGAT8BVgFPATABNwEtAUMBRgFIAU4BTgFCAUMBZAFZAVQBVgFBAUcBSgE9AUIBSQErATQBOgFSAUsBQgE4ATMBSgFMAV4BTQFEAUUBOQE4AUkBTAErATkBHgE2ATkBPgFBAUEBNQE/AU8BSgFNAVMBMgE8AToBMwE4AT8BHwEpASoBOwFFATcBNgEnATcBOAFTAUkBNQE/AS0BNgE5ATYBMAEzARgBIgEyATcBPAE1AS8BNwFDATUBUgFNASwBMgE0ASoBNgE0ASEBLQEZASsBPQFCAS0BIwEuATgBSQE9AT8BOgEpASgBQwE6AS8BJgEbASQBIgErAToBNwEqATIBOgE5AVEBRgEwATgBLAEiATkBLgEiASwBFAEmATEBPAExASABLAEsAUQBNgFHAT8BIAEcATMBLQEpASYBEwEgARMBHQE6ATEBKQEiATIBKwFDATQBKwE/ARcBGwEyAScBFwEaAQoBHAEhASUBLwEXAR0BGAE3ATMBOAErARwBIAElAR4BJwEmAQcBEwEIARQBJQElASABHwEcAR4BNwEoAScBMAETARIBIwEbARABGAH9ABUBDgEgASQBGQESAQgBKgEkATEBIQEXASABFgESASUBJgEDAQsBAAERARIBCAEjAR0BFwEUATEBHwEoASIBEgEYAR0BDQEXARwB+gD+AAUBGgEhARkBFQEQARUBFQEzASYBGQEhARABFgEVAQ8BCwESAQIBEwEHAQsBGwEYAREBFgElASIBJQEgARQBHwESAQQBGwEJAf4AAQEDAR0BEgEQARUBAgESARIBMAElARYBFgEHAQwBFAEVARUBHAH6AAQB9wD+APoA8gD3AP8AEgETATUBOwH6AAgBEAEKARgBFwH5AAkB7AD+ABABGgEDAfMACgELASIBEgEhAR4BAQEFARUBFgEEAQcB8QD+APcA/AATAQ8BBAEEAREBDQEjARsBCQEWAQUB/QARAQIB/AAAAewAAwECARcBCAH4AAEB/QAXAREBHAEUAfwA/QARAQkBCQEEAfUAAgHtAPgAEQEMAQQB/wAGAQMBJwESARABFwH9APgAFgECAfcAAQHpAPQABAEWAQQB+AABAfYAFAEUAR0BCAEAAQQBBQEEAQkBAwHuAPoA6ADxAAwBCAEDAQAB/wABAR4BDQETARQB/QD7AAcB+QAAAQAB4QD3APYACAEIAf0A/AD1AAwBBQEdAQ0BAAEDAfoA+wAKAQgB7AD7AOAA9gD5AAABBAEAAfsAAAEVAQMBFwEVAfQAAQEAAfoA9wAEAeQA8wDqAAUBCQEEAf0A6gACAf0AGQELAf8ABQH4APoAAwEEAfIA9gDfAOsA9QD1AAoB+gD3AP4ADQH9ABgBFQH1AAIB+ADyAP8AAwHeAO4A4gD+AAUBAAH0AOkA+QD+ABUBAwEIAQMB8QD0AAQB+QD7APUA1gDoAO0A8wABAfoA9AD2AAYBAQERAQkB8QD+APkA5gACAfcA5gDsANoA6gD9AAYB+ADgAPkA8gAUAfoABwH9AO8A8AAHAfMA9gD0ANcA5ADbAOsAAwH8AO8A9AD4APwAGAEHAfsAAAH1AOYAAAH1AOgA7QDVAOoA8gAGAfYA6QDoAO4ACAH+ABEBAgHsAPEA+wD1AP0A9wDYAO4A1wDlAP0A+wDrAPQA9gD8AA4BAQH/AAEB7QDvAAAB8wDpAOsA3QDiAOYA+ADxANcA2wDYAPUA6AD5AO0A4gDcANsA2QDlAN8AxgDSAMMAzQDnAOAA5QDcAN4A4AD5AOQA7wDnANAA1ADbAM4A0wDdAMQAzADNAOMA6gDgANIA0ADfAOcA8wDvANsA3gDQANIA5gDbAMwAzQC5AMsA2QDbAN0A1wDVANIA7wDYAPIA6wDRANQA1gDHANoA2wC7AMcAxwDeANwA1gDQAMIA2wDaAM8A1QDSAOAA2gDbAMsAzADZANYA9QDqANQA1ADSANkA3ADWAMMAzAC9AMIA1gDXANsA1ADRAM0A6gDnAOgA5ADMANUA2ADWAN8A1QC3AM4AygDXANsA2wDVANwA2ADXAP0A5ADkANwA0wDYAOMA3gDQANEAvADQANcA3wDiAN4A0wDWAOcA5QD2AO8A1wDYANwA4QDiANwAygDQAMkAzQDrAOIA3ADWAN8A5ADzAO4A9QDtANQA1gDjAOkA1gDYALwA0QDLANQA7gDlANwA2ADpAOoA/ADnAN0A4gDfANQA7gDhAM8A1gDGANYA4ADpAOIAzQDUANYA8gD1AO0A9ADYAOMA3wDNAOIA3QDCANIAxADbAOQA5ADdAN8A4QDeAPcA6QDZAN8A3gDYAOkA4wDQANUAwQDVAN8A6ADdANIA1gDZAPIA5AADAe8A4ADoAOIA0ADlAOUAygDSAMEAzgDqAOsA4gDkAOEA3QD/AOwA7ADmAOEA4gDqAOwA3ADhAMUA2QDeAOoA7wDpANgA2wDzAOoAAQH7AOgA7gDgANYA7ADoANEA4ADPAN0A6wDsAPAA5gDjAOQABQH1APUA8wDiAOUA6gDwAOUA9QDKANkA2QDpAPgA6gDhAOAA7gDzAAcB+QDuAP4A4ADSAPUA5QDmAOgAygDUAOgA6gDzAPQA4QDlAPkA7gAAAfgA5QDlAO4A6wDrAPAAzwDZAM8A6QDzAPMA4QDbAOwA8AABAfMA9wD7AN0A5QDrAOoA3wDpAMcA1QDgAOcA9gDnAOQA5QD4AO0A/wD4AOIA5gDmAOcA7gDsANEA3QDVAOIA7QDvAOcA3ADiAOoABQH5APkA+wDhAOsA6gDcAOIA6gDNANoA2ADkAPAA8wDfAOgA6wDqAAgB/QDuAOcA6QDhAPkA9ADeAOAAxQDiAOUA7gDnAOQA4ADjAP4A9gAAAfsA4gDrAOsA2ADrAOoA0wDZANgA4wD0AO8A4wDnAO0A6gAJAfQA+ADxAOEA5AD1APcA3ADjAM0A4QDjAO0A+ADmAOEA2AADAfIABgH5AOgA9QDlANUA8wD2ANAA3QDOAOQA6gDoAO4A6QDiAOUAAgH+APAA7QDkAOQA8QDoAOQA6ADJANoA3QD0APEA5wDjANsA9wDvAAYB+gDuAPcA4wDYAPEA6ADaANwAzgDbAOgA6QDwAO0A3QDjAAUB9gD8APAA3gDrAOsA7ADqAO0AywDUANkA8ADyAOYA5QDeAOgA5AAHAfwA7QD3AOIA4gDoAOQA3ADrAMMA1ADjAOYA8gDhAOMA6gD0AO4A/wDzAOEA4ADuAOcA7QDtAMoA4QDLAOkA6gDxAOIA2gDmAOEABgH2APQA8wDmAN8A6wDbAOUA6QDCANQA3gDtAOsA4wDeAOUA6gDnAAIB/gDcAOAA5QDoAOkA5gDaAOEAyADaAO4A8wDnAM8A5ADhAAAB7gD/AP8A2wDmAOUA3wDnAOsAxgDXANEA6ADsAOQA4gDjAOoA6wACAe8A6gDkAOEA4wDpAOQA2gDeAMQA5QDZAPIA5wDnANgA3wD6AOwA+wD7AN8A5wDkANcA5gDfAM4A0wDOAN0A6wDoAOMA5gDdAOUAAAHwAOwA5ADgANQA8QDmANkA3wDGANIA2gDqAO4A3QDWANsA7QDpAP4A9ADgAO0A2gDTAOcA3wDNANcAwwDRAOUA4wDlAOIA2QDgAPUA7QDsAOEA2gDXAO0A3gD1APIA4gDsAOEA+AD7APQA7ADnAPkA+gAQAQcB8wADAfUA5wD7AO8A6wDwAM8A5wDkAPoA9AD0AOcA7wATAQMBCgEBAe0A9wD7AAAB8QD9ANYA4QDYAPEA/QD4AOwA4gD2APYAEgEFAfkACgHsAPEA/gDsAO4A9QDOAOQA4wD0AP8A8gDwAPAABgH/AAoBAAHtAPMA+gD0APkA/gDaAOwA0ADwAPgA/gD7AOwA7ADxABIBCAEAAQ0B7AD0AP8A7ADwAPMA0wDgAN4A9QD+APMA7gDrAPkA8wAPAQIB6QD2AO4A6wD9APYA5wDnAM0A6wDuAPkA7wDpAOkA5gAFAf0AAAECAeQA8wDoAN0A7gD4AMcA3QDVAOsA7ADpAOsA6QDnAOIABgHzAO0A6ADgAOYA8gDoANkA3gDHANQA4QDsAOoA4ADVAOEA8wDtAPwA+gDaAOUA3ADZAN8A5ADPANQAwwDYAOkA4gDhAN0A3wDbAP0A7QDsAOcA0gDcAOcA5ADYAOAAwADPANMA6QDoANkA1wDTAOsA5gD4AO4A3QDrANgA1ADiANgAzQDZAL0AygDgAOIA4QDeANgA4ADxAOoA5gDmANQA2QDhAN0A3QDgAMEAzADRAOIA4wDYAN0AzADiANoA+QDmAOUA6gDTANIA3ADWAMQA0QC5AMoA0QDUAOAA3QDPANUA5gDlAOsA4gDIANgA0gDSANgA2wC8AL4AvwDZANIA1ADSAMsAywDNAPIA4gDfAOEAywDOANQAwwDMANEAsQC9AMQAzwDTAM0AyADOANQAzQDlANwAwQDEAMkAzwDQAMsAtgC9AKwAxADHANMAyQC9AMIAxwDgANQA2QDZAL8AywDHAL0AxwDMAKkAtQC2AMcAygDDAMcAygDIAMcA4wDYAMQAvwDGAMMAzgDFALsAvQCmALMAxADPAMMAtgC+AMYA0QDIAOEA2wC6AMYAxQC9AMgAxQCrALcAoQCyAM8AyQDFAMIAvADEANoA0ADIAMoAuAC8AMsAxAC7AMEAogCxAL4A0QDBALoAugC1AM4AvwDiANcAvgDMALoAsQDBAMAArgC3AJgApADIAMQAzQDGAK0AsQDFALsA2wDfALYAvQC1ALoApQCmAKUAtAC7ANEAxgDAAL4AtQDMAMsA0AC+ALcAxgCwAKwAxADAAKgAsQCdALMAswC7AMAAvQCxALAA0gDHAM0AwwCsALAAvwC0ALsAuQCZAKgAoAC1AL0AvQC2AK4AtwC4AM8AxwDBAM0AqwCtAL0AswCoALAAmACpAKwArQC/ALcArwCxAMYAwADMALsAsQC0ALcArgDAAL0AmACeAKEAuACzALUAswCtAKwArADQAMUAwgDBAKwAsQC2AKcArwC6AJUAnwCoAK0AvQCrALIAswC3ALQA0ADEAK4ArQCvALMAvAC2AKIApgCaAKUAtAC1ALkApgCsAK4AwwC8AMMAyACsALIAtACeALQAuACSAJ4AnACwALIArQCxALYArwCuANAAxACtAK8ArACvALYAtgCjALEAjwChAKsAvgC1AKEAqgCtAL0AtADMAMYApwCuAK8AoACxAKwAmwClAJMAoQC5ALIArgClAKsAqwDMALsAtQCvAKYAqACzALQAqACnAI0AnwCiALsAsACoAKMApgC3ALIAyADHAKYAtwClAJ4AsQCqAJoApgCOAJsArwCwAKwApQCkAKUAvwCyALkAuACcAJ4ArwCxAKIAqQCMAKAAlACkALYArQCcAJMAsQCwAMMArQCwAL4AnACXAK0AqQCZAKIAiQCeAKQApwCuALMAmACkALwAtAC9AK4AogCoAKkAqACrAKsAjQCZAI8ApgCwALAAogCWAKsAogDIAKwAuAC8AJ4AnACwAJ8AngCcAIkAlQCcAKAAtACrAKAAoQC4ALMAvACuAKMArACiAKYAsAC1AIwAmQCKAKoApgCmAJoAjACIAIIAsgClAKYApwCMAJYAjwCAAJQAmQBuAH0AfwCRAJQAkgCMAJMAmQCTALYApgCQAI8AiQCLAJQAjwA=\",\n\tobserver: null,\n\tchat_window_observer: null,\n\tlast_chat_title: \"\",\n\tread_message_count: -1,\n\tfirst_chat_open: true,\n\tnotification: window.Notification || window.mozNotification || window.webkitNotification,\n\tcan_use_notifications: false,\n\n\tpreferences: {\n\n\t\t\"sep0\": {\n\t\t\ttext: \"Messaging Popout & Button Tweaks\",\n\t\t\ttype: \"separator\",\n\t\t},\n\t\t\"reveal_true_face\": {\n\t\t\ttext: \"Tumbley the Tumblr\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t},\n\t\t\"hide_chat_bubble\": {\n\t\t\ttext: \"Hide the chat bubble completely\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t},\n\t\t\"hide_send_post\": {\n\t\t\ttext: \"Hide the send post through IM in the post share menu\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t},\n\t\t\"hide_online_indicators\": {\n\t\t\ttext: \"Hide online indicators from the messaging popout\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t},\n\n\t\t\"sep1\": {\n\t\t\ttext: \"Chatbox Tweaks\",\n\t\t\ttype: \"separator\",\n\t\t},\n\t\t\"move_self_to_right\": {\n\t\t\ttext: \"Move your own messages to the right\",\n\t\t\tdefault: true,\n\t\t\tvalue: true\n\t\t},\n\t\t\"move_other_to_right\": {\n\t\t\ttext: \"Move your chat partner's messages to the right\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t},\n\t\t\"allow_minimising\": {\n\t\t\ttext: \"Allow minimising a chat by clicking on the title\",\n\t\t\tdefault: true,\n\t\t\tvalue: true\n\t\t},\n\t\t\"minimise_hotkey\": {\n\t\t\ttext: \"Use Alt+[Down Arrow] to minimise and Alt+[Up Arrow] to bring the chatbox back\",\n\t\t\tdefault: true,\n\t\t\tvalue: true\n\t\t},\n\t\t\"allow_emojis\": {\n\t\t\ttext: \"Enable Emojis in the chat\",\n\t\t\tdefault: true,\n\t\t\tvalue: true\n\t\t},\n\t\t\"remove_message_headers\": {\n\t\t\ttext: \"Remove usernames from messages\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t},\n\t\t\"make_icons_round\": {\n\t\t\ttext: \"Round user icons\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t},\n\t\t\"rectangle_icons_on_hover\": {\n\t\t\ttext: \"Make icons rectangular on hover\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t},\n\n\t\t\"sep2\": {\n\t\t\ttext: \"Notification Tweaks\",\n\t\t\ttype: \"separator\",\n\t\t},\n\t\t\"sound_notification\": {\n\t\t\ttext: \"Make a sound if you receive a new message\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t},\n\t\t\"desktop_notification\": {\n\t\t\ttext: \"Show a desktop notification\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t},\n\t\t\"tab_title_notification\": {\n\t\t\ttext: \"Show <[!!]> in Tab when you receive a new message.\",\n\t\t\tdefault: true,\n\t\t\tvalue: true\n\t\t},\n\n\t\t\"sep3\": {\n\t\t\ttext: \"CSS Tweaks\",\n\t\t\ttype: \"separator\"\n\t\t},\n\t\t\"my_chat_bubble_background\": {\n\t\t\ttext: \"Background for my chat bubbles\",\n\t\t\ttype: \"text\",\n\t\t\tdefault: \"\",\n\t\t\tvalue: \"rgba(0,0,0,.05)\"\n\t\t},\n\t\t\"other_chat_bubble_background\": {\n\t\t\ttext: \"Background for other people's chat bubbles\",\n\t\t\ttype: \"text\",\n\t\t\tdefault: \"\",\n\t\t\tvalue: \"rgba(0,0,0,.1)\"\n\t\t},\n\t\t\"my_chat_bubble_text\": {\n\t\t\ttext: \"Text color for my chat bubbles\",\n\t\t\ttype: \"text\",\n\t\t\tdefault: \"\",\n\t\t\tvalue: \"rgb(68,68,68)\"\n\t\t},\n\t\t\"other_chat_bubble_text\": {\n\t\t\ttext: \"Text color for other people's chat bubbles\",\n\t\t\ttype: \"text\",\n\t\t\tdefault: \"\",\n\t\t\tvalue: \"rgb(68,68,68)\"\n\t\t},\n\t\t\"background_override\": {\n\t\t\ttext: \"Change chat background color\",\n\t\t\ttype: \"text\",\n\t\t\tdefault: \"\",\n\t\t\tvalue: \"\"\n\t\t}\n\n\t},\n\n\tvisibilityHandler: function() {\n\t\tif (!document.hidden) {\n\t\t\tdocument.title = document.title.replace(\"<[!!]>\", \"\");\n\t\t}\n\t},\n\n\tget_current_chat_user: function() {\n\t\tif ($(\".title\").text().indexOf(\"+\") !== -1) {\n\t\t\treturn $($(\".title\").find(\"a\").get(0)).data(\"js-tumblelog-name\");\n\t\t} else {\n\t\t\treturn XKit.tools.get_current_blog();\n\t\t}\n\t},\n\n\tget_chat_partner_name: function() {\n\t\tif ($(\".title\").text().indexOf(\"+\") !== -1) {\n\t\t\treturn $($(\".title\").find(\"a\").get(1)).data(\"js-tumblelog-name\");\n\t\t} else {\n\t\t\treturn $($(\".title\").find(\"a\").get(0)).data(\"js-tumblelog-name\");\n\t\t}\n\t},\n\n\tdo_messages: function() {\n\t\tXKit.extensions.messaging_tweaks.observer.disconnect();\n\t\tvar icons = $(\".messaging-conversation-popovers .avatar:not(.xkit-my_messaging_icon, .xkit-others_messaging_icon)\");\n\n\t\tfunction img_onload(msg_div, emoji_text, emoji) {\n\t\t\tmsg_div.html(msg_div.html().replace(new RegExp(emoji_text, \"g\"), emoji.outerHTML));\n\t\t}\n\t\ticons.each(function() {\n\t\t\tif ($(this).parents(\".conversation-compose\").length !== 0) { return; }\n\t\t\tif ($(this).parent().find(\"[data-js-tumblelog-name]:not(.icon)\").attr(\"data-js-tumblelog-name\") === XKit.extensions.messaging_tweaks.get_current_chat_user()) {\n\t\t\t\t$(this).addClass(\"xkit-my_messaging_icon\");\n\t\t\t\t$(this).parents(\".conversation-message\").addClass(\"xkit-my_messaging_message\");\n\t\t\t} else {\n\t\t\t\t$(this).addClass(\"xkit-others_messaging_icon\");\n\t\t\t\t$(this).parents(\".conversation-message\").addClass(\"xkit-others_messaging_message\");\n\t\t\t}\n\t\t\tif (XKit.extensions.messaging_tweaks.preferences.allow_emojis.value) {\n\t\t\t\tvar msg_div = $(this).parents(\".conversation-message\").find(\".message-bubble .message\");\n\n\t\t\t\t// Use regex to find emoji patterns in the chat message\n\t\t\t\t// Find the string between the two \":\" to find which image to use\n\t\t\t\t// but only if there are emoji tags found\n\t\t\t\tvar emojis = msg_div.text().match(/:(.*?):/gi);\n\t\t\t\tif (emojis) {\n\t\t\t\t\tvar already_replaced = {};\n\t\t\t\t\tfor (var i = 0; i < emojis.length; i++) {\n\t\t\t\t\t\tif (already_replaced[emojis[i]]) { continue; }\n\t\t\t\t\t\talready_replaced[emojis[i]] = true;\n\t\t\t\t\t\tvar emoji_tag = emojis[i].toLowerCase().substring(1, emojis[i].length - 1);\n\t\t\t\t\t\tvar emoji_url = \"http://www.emoji-cheat-sheet.com/graphics/emojis/\" + emoji_tag + \".png\";\n\t\t\t\t\t\tif (emoji_tag === \"tobdog\") {\n\t\t\t\t\t\t\temoji_url = \"http://vignette1.wikia.nocookie.net/steamtradingcards/images/2/21/Tobdog.png/revision/latest?cb=20151011230955\";\n\t\t\t\t\t\t} else if (emoji_tag === \"+1\") {\n\t\t\t\t\t\t\temoji_url = \"http://www.emoji-cheat-sheet.com/graphics/emojis/plus1.png\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar emoji = new Image();\n\t\t\t\t\t\temoji.alt = \":\" + emoji_tag + \":\";\n\t\t\t\t\t\temoji.title = \":\" + emoji_tag + \":\";\n\t\t\t\t\t\temoji.height = \"22\";\n\t\t\t\t\t\temoji.onload = img_onload.bind(this, msg_div, emojis[i].replace(\"+\", \"\\\\+\"), emoji);\n\t\t\t\t\t\temoji.src = emoji_url;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tif (XKit.extensions.messaging_tweaks.preferences.move_self_to_right.value) {\n\t\t\t$(\".xkit-my_messaging_icon\").each(function() {\n\t\t\t\t$(this).parent().append($(this));\n\t\t\t});\n\t\t}\n\t\tif (XKit.extensions.messaging_tweaks.preferences.move_other_to_right.value) {\n\t\t\t$(\".xkit-others_messaging_icon\").each(function() {\n\t\t\t\t$(this).parent().append($(this));\n\t\t\t});\n\t\t}\n\n\t\tif (XKit.extensions.messaging_tweaks.last_chat_title !== $(\".messaging-conversation-popovers .title\").text()) {\n\t\t\tXKit.extensions.messaging_tweaks.last_chat_title = $(\".messaging-conversation-popovers .title\").text();\n\t\t\tXKit.extensions.messaging_tweaks.first_chat_open = true;\n\t\t\tXKit.extensions.messaging_tweaks.read_message_count = 0;\n\t\t\tif (XKit.extensions.messaging_tweaks.preferences.allow_minimising.value) {\n\t\t\t\t$(\".conversation-header-main\").on(\"click.minimise_header\", function(e) {\n\t\t\t\t\tif ($('.minimize').length) {\n\t\t\t\t\t\t$('.minimize').get(0).click();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif ($(\".xkit-others_messaging_icon\").length > XKit.extensions.messaging_tweaks.read_message_count && $(\".messaging-conversation-popovers .avatar:not(.pinned-target)\").length > 1) {\n\t\t\tif (XKit.extensions.messaging_tweaks.first_chat_open) {\n\t\t\t\tXKit.extensions.messaging_tweaks.first_chat_open = false;\n\t\t\t\tXKit.extensions.messaging_tweaks.read_message_count = $(\".xkit-others_messaging_icon\").length;\n\t\t\t} else {\n\t\t\t\tvar new_message_count = ($(\".xkit-others_messaging_icon\").length - XKit.extensions.messaging_tweaks.read_message_count);\n\t\t\t\tif (XKit.extensions.messaging_tweaks.preferences.sound_notification.value) {\n\t\t\t\t\tnew Audio(XKit.extensions.messaging_tweaks.notification_sound).play();\n\t\t\t\t}\n\t\t\t\tif (document.hidden || $(\".conversation-header-main\").hasClass(\"minimised\")) {\n\t\t\t\t\tif (XKit.extensions.messaging_tweaks.preferences.tab_title_notification.value) {\n\t\t\t\t\t\tdocument.title = \"<[!!]> Tumblr\";\n\t\t\t\t\t}\n\t\t\t\t\tif (XKit.extensions.messaging_tweaks.preferences.desktop_notification.value) {\n\t\t\t\t\t\tif (XKit.extensions.messaging_tweaks.can_use_notifications) {\n\t\t\t\t\t\t\tfor (var i = 1; i <= new_message_count; i++) {\n\t\t\t\t\t\t\t\tnew XKit.extensions.messaging_tweaks.notification(XKit.extensions.messaging_tweaks.get_chat_partner_name(), {\n\t\t\t\t\t\t\t\t\tbody: $(\".xkit-others_messaging_message:eq(-\" + i + \") .message-bubble .message\").text(),\n\t\t\t\t\t\t\t\t\ticon: $(\".xkit-others_messaging_icon img\").attr(\"src\"),\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tXKit.extensions.messaging_tweaks.read_message_count = $(\".xkit-others_messaging_icon\").length;\n\t\t\t}\n\t\t}\n\n\t\tif ($(\".conversation-main\").get(0) !== null && typeof($(\".conversation-main\").get(0)) !== \"undefined\") {\n\t\t\tXKit.extensions.messaging_tweaks.observer.observe($(\".conversation-main\").get(0), { subtree: true, childList: true });\n\t\t}\n\t},\n\n\thook_chat_window: function() {\n\t\tXKit.extensions.messaging_tweaks.observer.observe($(\".conversation-main\").get(0), { subtree: true, childList: true });\n\t\tXKit.extensions.messaging_tweaks.read_message_count = $(\".xkit-others_messaging_icon\").length;\n\t},\n\n\trun: function() {\n\t\tif (!XKit.interface.is_tumblr_page()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (XKit.extensions.messaging_tweaks.preferences.minimise_hotkey.value) {\n\t\t\t$(document).on(\"keydown.minimise_header\", function(e) {\n\t\t\t\tif (!e.altKey) { return; }\n\t\t\t\tif (e.which === 40) {\n\t\t\t\t\tif ($('.minimize').length) {\n\t\t\t\t\t\t $('.minimize').get(0).click();\n\t\t\t\t\t}\n\t\t\t\t} else if (e.which === 38) {\n\t\t\t\t\tif ($('.conversation-minimized').length) {\n\t\t\t\t\t\t$('.conversation-minimized').get(0).click();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (XKit.extensions.messaging_tweaks.preferences.desktop_notification.value) {\n\t\t\tXKit.extensions.messaging_tweaks.notification.requestPermission(function(result) {\n\t\t\t\tif (result === \"granted\") {\n\t\t\t\t\tXKit.extensions.messaging_tweaks.can_use_notifications = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tif (XKit.extensions.messaging_tweaks.preferences.tab_title_notification.value) {\n\t\t\tdocument.addEventListener(\"visibilitychange\", XKit.extensions.messaging_tweaks.visibilityHandler);\n\t\t}\n\t\tXKit.extensions.messaging_tweaks.observer = new MutationObserver(XKit.extensions.messaging_tweaks.do_messages);\n\t\tXKit.extensions.messaging_tweaks.chat_window_observer = new MutationObserver(function(mutations, observer) {\n\t\t\tmutations.forEach(function(mutation) {\n\t\t\t\tvar i, node;\n\t\t\t\t// Check if Chat Window has been added\n\t\t\t\tif (mutation.addedNodes.length) {\n\t\t\t\t\tfor (i = 0; i < mutation.addedNodes.length; i++) {\n\t\t\t\t\t\tnode = $(mutation.addedNodes[i]);\n\t\t\t\t\t\tif (node.hasClass(\"messaging-conversation-popovers\")) {\n\t\t\t\t\t\t\tXKit.extensions.messaging_tweaks.hook_chat_window();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// Check if chat window has been removed\n\t\t\t\t} else if (mutation.removedNodes.length) {\n\t\t\t\t\tfor (i = 0; i < mutation.removedNodes.length; i++) {\n\t\t\t\t\t\tnode = $(mutation.removedNodes[i]);\n\t\t\t\t\t\tif (node.hasClass(\"messaging-conversation-popovers\")) {\n\t\t\t\t\t\t\tXKit.extensions.messaging_tweaks.observer.disconnect();\n\t\t\t\t\t\t\tXKit.extensions.messaging_tweaks.last_chat_title = \"\";\n\t\t\t\t\t\t\tXKit.extensions.messaging_tweaks.first_chat_open = true;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tXKit.extensions.messaging_tweaks.chat_window_observer.observe(document.body, {\n\t\t\tchildList: true,\n\t\t\tsubtree: true,\n\t\t\tattributes: false,\n\t\t\tcharacterData: false\n\t\t});\n\t\tXKit.tools.init_css(\"messaging_tweaks\");\n\t\tif (XKit.extensions.messaging_tweaks.preferences.reveal_true_face.value) {\n\t\t\t$(\".tab.iconic.tab_messaging .tab_anchor\").addClass(\"true-icon\");\n\t\t}\n\t\tif (XKit.extensions.messaging_tweaks.preferences.hide_chat_bubble.value) {\n\t\t\t$(\".tab.iconic.tab_messaging\").hide();\n\t\t}\n\t\tif (XKit.extensions.messaging_tweaks.preferences.background_override.value !== \"\") {\n\t\t\tXKit.tools.add_css(\".conversation-main { background: \" + XKit.extensions.messaging_tweaks.preferences.background_override.value + \" !important; }\", \"messaging_tweaks\");\n\t\t}\n\t\tif (XKit.extensions.messaging_tweaks.preferences.move_self_to_right.value) {\n\t\t\tXKit.tools.add_css(\".xkit-my_messaging_icon { position: absolute; right: 0px; margin-right: 0px !important; }\", \"messaging_tweaks\");\n\t\t\tXKit.tools.add_css(\".xkit-my_messaging_message .message-bubble { margin-left: 0px !important; margin-right: 40px; }\", \"messaging_tweaks\");\n\t\t\tXKit.tools.add_css(\".xkit-my_messaging_message .message-container { justify-content: flex-end !important; }\", \"messaging_tweaks\");\n\t\t\tXKit.tools.add_css(\".xkit-my_messaging_message .conversation-message-post .message-bubble { margin-right: unset; }\", \"messaging_tweaks\");\n\t\t\tXKit.tools.add_css(\".xkit-my_messaging_message .conversation-message-post .avatar { position: relative; right: unset; margin-left: 10px; }\", \"messaging_tweaks\");\n\t\t\tXKit.tools.add_css(\".xkit-my_messaging_message .conversation-message-post .thumbnail { margin-left: unset; margin-right: 40px; }\", \"messaging_tweaks\");\n\t\t}\n\t\tif (XKit.extensions.messaging_tweaks.preferences.move_other_to_right.value) {\n\t\t\tXKit.tools.add_css(\".xkit-others_messaging_icon { position: absolute; right: 0px; margin-right: 0px !important; }\", \"messaging_tweaks\");\n\t\t\tXKit.tools.add_css(\".xkit-others_messaging_message .message-bubble { margin-left: 0px !important; margin-right: 40px; }\", \"messaging_tweaks\");\n\t\t\tXKit.tools.add_css(\".xkit-others_messaging_message .message-container { justify-content: flex-end !important; }\", \"messaging_tweaks\");\n\t\t\tXKit.tools.add_css(\".xkit-others_messaging_message .conversation-message-post .message-bubble { margin-right: unset; }\", \"messaging_tweaks\");\n\t\t\tXKit.tools.add_css(\".xkit-others_messaging_message .conversation-message-post .avatar { position: relative; right: unset; margin-left: 10px; }\", \"messaging_tweaks\");\n\t\t\tXKit.tools.add_css(\".xkit-others_messaging_message .conversation-message-post .thumbnail { margin-left: unset; margin-right: 40px; }\", \"messaging_tweaks\");\n\t\t}\n\t\tif (XKit.extensions.messaging_tweaks.preferences.remove_message_headers.value) {\n\t\t\tXKit.tools.add_css(\".conversation-message-text .message-bubble-header a {display:none;}\", \"messaging_tweaks\");\n\t\t}\n\t\tif (XKit.extensions.messaging_tweaks.preferences.hide_send_post.value) {\n\t\t\tXKit.tools.add_css(\".messaging-share-post-search, .messaging-share-post-main {display:none;}\", \"messaging_tweaks\");\n\t\t}\n\t\tif (XKit.extensions.messaging_tweaks.preferences.hide_online_indicators.value) {\n\t\t\tXKit.tools.add_css(\".status-indicator-wrapper, .chat-status-banner {display:none;}\", \"messaging_tweaks\");\n\t\t}\n\t\tif (XKit.extensions.messaging_tweaks.preferences.make_icons_round.value) {\n\t\t\tXKit.tools.add_css(\".avatar > img { border-radius: 30px !important; transition: border-radius 0.5s; }\", \"messaging_tweaks\");\n\t\t\tif (XKit.extensions.messaging_tweaks.preferences.rectangle_icons_on_hover.value) {\n\t\t\t\tXKit.tools.add_css(\".avatar > img:hover { border-radius: 2px !important; }\", \"messaging_tweaks\");\n\t\t\t}\n\t\t}\n\n\t\tif (XKit.extensions.messaging_tweaks.preferences.other_chat_bubble_background.value) {\n\t\t\tXKit.tools.add_css(\".messaging-conversation .xkit-others_messaging_message .conversation-message-text .message-bubble { background: \" + XKit.extensions.messaging_tweaks.preferences.other_chat_bubble_background.value + \" !important; }\", \"messaging_tweaks\");\n\t\t\tXKit.tools.add_css(\".messaging-conversation .xkit-others_messaging_message .conversation-message-post .message-bubble { background: \" + XKit.extensions.messaging_tweaks.preferences.other_chat_bubble_background.value + \" !important; }\", \"messaging_tweaks\");\n\t\t\tXKit.tools.add_css(\".messaging-conversation .xkit-others_messaging_message .conversation-message-post .icon { background: \" + XKit.extensions.messaging_tweaks.preferences.other_chat_bubble_background.value + \" !important; }\", \"messaging_tweaks\");\n\t\t}\n\t\tif (XKit.extensions.messaging_tweaks.preferences.my_chat_bubble_background.value) {\n\t\t\tXKit.tools.add_css(\".messaging-conversation .xkit-my_messaging_message .conversation-message-text .message-bubble { background: \" + XKit.extensions.messaging_tweaks.preferences.my_chat_bubble_background.value + \" !important; }\", \"messaging_tweaks\");\n\t\t\tXKit.tools.add_css(\".messaging-conversation .xkit-my_messaging_message .conversation-message-post .message-bubble { background: \" + XKit.extensions.messaging_tweaks.preferences.my_chat_bubble_background.value + \" !important; }\", \"messaging_tweaks\");\n\t\t\tXKit.tools.add_css(\".messaging-conversation .xkit-my_messaging_message .conversation-message-post .icon { background: \" + XKit.extensions.messaging_tweaks.preferences.my_chat_bubble_background.value + \" !important; }\", \"messaging_tweaks\");\n\t\t}\n\t\tif (XKit.extensions.messaging_tweaks.preferences.other_chat_bubble_text.value) {\n\t\t\tXKit.tools.add_css(\".messaging-conversation .xkit-others_messaging_message .conversation-message-text .message-bubble { color: \" + XKit.extensions.messaging_tweaks.preferences.other_chat_bubble_text.value + \" !important; }\", \"messaging_tweaks\");\n\t\t\tXKit.tools.add_css(\".messaging-conversation .xkit-others_messaging_message .conversation-message-text .message-bubble-header a { color: \" + XKit.extensions.messaging_tweaks.preferences.other_chat_bubble_text.value + \" !important; }\", \"messaging_tweaks\");\n\t\t\tXKit.tools.add_css(\".messaging-conversation .xkit-others_messaging_message .conversation-message-post .message-bubble { color: \" + XKit.extensions.messaging_tweaks.preferences.other_chat_bubble_text.value + \" !important; }\", \"messaging_tweaks\");\n\t\t\tXKit.tools.add_css(\".messaging-conversation .xkit-others_messaging_message .conversation-message-post .icon::before { color: \" + XKit.extensions.messaging_tweaks.preferences.other_chat_bubble_text.value + \" !important; }\", \"messaging_tweaks\");\n\t\t}\n\t\tif (XKit.extensions.messaging_tweaks.preferences.my_chat_bubble_text.value) {\n\t\t\tXKit.tools.add_css(\".messaging-conversation .xkit-my_messaging_message .conversation-message-text .message-bubble { color: \" + XKit.extensions.messaging_tweaks.preferences.my_chat_bubble_text.value + \" !important; }\", \"messaging_tweaks\");\n\t\t\tXKit.tools.add_css(\".messaging-conversation .xkit-my_messaging_message .conversation-message-text .message-bubble-header a { color: \" + XKit.extensions.messaging_tweaks.preferences.my_chat_bubble_text.value + \" !important; }\", \"messaging_tweaks\");\n\t\t\tXKit.tools.add_css(\".messaging-conversation .xkit-my_messaging_message .conversation-message-post .message-bubble { color: \" + XKit.extensions.messaging_tweaks.preferences.my_chat_bubble_text.value + \" !important; }\", \"messaging_tweaks\");\n\t\t\tXKit.tools.add_css(\".messaging-conversation .xkit-my_messaging_message .conversation-message-post .icon::before { color: \" + XKit.extensions.messaging_tweaks.preferences.my_chat_bubble_text.value + \" !important; }\", \"messaging_tweaks\");\n\t\t}\n\n\t\t// There's either 1 or no messaging-conversation-popovers on extension start\n\t\t$(\".messaging-conversation-popovers\").each(function() {\n\t\t\tXKit.extensions.messaging_tweaks.hook_chat_window();\n\t\t\tXKit.extensions.messaging_tweaks.do_messages();\n\t\t});\n\n\t\tthis.running = true;\n\t},\n\n\tdestroy: function() {\n\t\tif (XKit.extensions.messaging_tweaks.preferences.tab_title_notification.value) {\n\t\t\tdocument.removeEventListener(\"visibilitychange\", XKit.extensions.messaging_tweaks.visibilityHandler);\n\t\t\tdocument.title = document.title.replace(\"<[!!]>\", \"\");\n\t\t}\n\t\tXKit.extensions.messaging_tweaks.observer.disconnect();\n\t\tXKit.extensions.messaging_tweaks.chat_window_observer.disconnect();\n\t\tXKit.extensions.messaging_tweaks.last_chat_title = \"\";\n\t\tif (!XKit.extensions.messaging_tweaks.preferences.move_self_to_right.value) {\n\t\t\t$(\".xkit-my_messaging_icon\").each(function() {\n\t\t\t\t$(this).parent().prepend($(this));\n\t\t\t});\n\t\t}\n\t\tif (!XKit.extensions.messaging_tweaks.preferences.move_other_to_right.value) {\n\t\t\t$(\".xkit-others_messaging_icon\").each(function() {\n\t\t\t\t$(this).parent().prepend($(this));\n\t\t\t});\n\t\t}\n\t\t$(\".true-icon\").removeClass(\"true-icon\");\n\t\t$(\".tab.iconic.tab_messaging\").show();\n\t\t$(\".xkit-others_messaging_message, .xkit-my_messaging_message\").each(function() {\n\t\t\tvar msg_div = $(this).find(\".message-bubble .message\");\n\t\t\tmsg_div.find(\"img\").each(function() {\n\t\t\t\tvar img_html = $('
').append($(this).clone()).html();\n\t\t\t\tvar img_alt = $(this).attr(\"alt\");\n\t\t\t\tmsg_div.html(msg_div.html().replace(img_html, img_alt));\n\t\t\t});\n\t\t});\n\t\t$(\".xkit-others_messaging_message\").removeClass(\"xkit-others_messaging_message\");\n\t\t$(\".xkit-others_messaging_icon\").removeClass(\"xkit-others_messaging_icon\");\n\t\t$(\".xkit-my_messaging_message\").removeClass(\"xkit-my_messaging_message\");\n\t\t$(\".xkit-my_messaging_icon\").removeClass(\"xkit-my_messaging_icon\");\n\t\tXKit.tools.remove_css(\"messaging_tweaks\");\n\t\t$(\".conversation-header-main\").off(\"click.minimise_header\");\n\t\t$(document).off(\"keydown.minimise_header\");\n\t\tthis.running = false;\n\t},\n\n\tcpanel: function(cp) {\n\t\tfunction update() {\n\t\t\tif (round_icons_setting.hasClass(\"selected\")) {\n\t\t\t\trectangle_icons_setting.show();\n\t\t\t} else {\n\t\t\t\trectangle_icons_setting.hide();\n\t\t\t}\n\t\t}\n\t\tvar round_icons_setting = cp.find(\"[data-setting-id=make_icons_round]\");\n\t\tvar rectangle_icons_setting = cp.find(\"[data-setting-id=rectangle_icons_on_hover]\");\n\t\tupdate();\n\t\tround_icons_setting.click(update);\n\t}\n\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,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\n","css":".tab.iconic.tab_messaging .true-icon {\n\tbackground: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAVCAYAAABCIB6VAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACxSURBVEhLrZNRDsMwCEN7/0tnwGLmAaHplidZsTD4L9cYo9Md1Y2pHIqekjrSQPQP3sOFKqaaRZZ3CMrwbbdeeODFFTznvXjD3olLDLJqp8uMGCwXN/i6jSUIWR3LfTcTDuF3pLD/mElc5FepPL+e8yLAAjLeqTx2OcsDgWfwnRT2RhoIPHvywhtpMMEcWfdCzPJLK5x1qmiLf8X6Thd738li7jpWzD2mNAi6o7oRjesFZ0tq6opXmBsAAAAASUVORK5CYII=') no-repeat !important;\n\tmargin-left: -6px;\n\tmargin-right: -15px;\n\twidth: 46px;\n\tbackground-size: 27px !important;\n\tbackground-attachment: fixed;\n\tbackground-position: center !important;\n}\n\n.tab_bar .tab_messaging .true-icon:before {\n\tcontent: \"\" !important;\n}\n","title":"Messaging Tweaks","description":"Helpful tweaks for Tumblr IM","developer":"New-XKit","version":"1.8.3","details":"This adds a few helpful tweaks to the Tumblr IM, for example minimising the chat, hiding the IM icon or changing the looks of the chat window.","frame":"false","beta":"false","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/mirrorposts.json b/Extensions/dist/mirrorposts.json
new file mode 100644
index 000000000..f2199abd4
--- /dev/null
+++ b/Extensions/dist/mirrorposts.json
@@ -0,0 +1 @@
+{"id":"mirrorposts","script":"//* TITLE Mirror Button **//\n//* VERSION 1.0.1 **//\n//* DESCRIPTION\tA button to easily backup posts **//\n//* DETAILS This extension provides a button that will create a mirror of a post on either archive.org or archive.is **//\n//* DEVELOPER Legoben **//\n//* FRAME false **//\n//* BETA false **//\n\nXKit.extensions.mirrorposts = new Object({\n\n\trunning: false,\n\n\tpreferences: {\n\t\t\"archiveis\": {\n\t\t\ttext: \"Use archive.is instead of The WayBack Machine\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t},\n\t\t\"menu\": {\n\t\t\ttext: \"Create a mirror button below each post instead of having it in the share menu\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t}\n\t},\n\n\n\trun: function() {\n\t\tthis.running = true;\n\t\tXKit.tools.init_css(\"mirrorposts\");\n\t\tXKit.post_listener.add(\"archivebutton_addButton\", XKit.extensions.mirrorposts.addButton);\n\t\tXKit.extensions.mirrorposts.addButton();\n\n\t},\n\n\tdestroy: function() {\n\t\tXKit.post_listener.remove(\"archivebutton_addButton\");\n\t\tXKit.tools.remove_css(\"mirrorposts\");\n\t\t$(\".archivebutton-button\").remove();\n\t\t\n\t\t$(\".archivebutton_applied .share_social_button\").unbind();\n\t\t$(\".archivebutton_applied\").removeClass(\"archivebutton_applied\");\n\t\t\n\t\t\n\t\tthis.running = false;\n\n\t},\n\n\taddButton: function() {\n\t\t$(\".post\").not(\".archivebutton_applied\").each(function() {\n\t\t\t$(this).addClass(\"archivebutton_applied\");\n\n\n\t\t\tvar posturl = $(\".post_permalink\", this).attr(\"href\");\n\n\t\t\tvar archiveurl;\n\t\t\tif (XKit.extensions.mirrorposts.preferences.archiveis.value) {\n\t\t\t\tarchiveurl = \"https://archive.is/?run=1&url=\" + encodeURIComponent(posturl);\n\t\t\t} else {\n\t\t\t\tarchiveurl = \"https://web.archive.org/save/\" + posturl;\n\t\t\t}\n\n\n\t\t\tif (XKit.extensions.mirrorposts.preferences.menu.value) {\n\n\t\t\t\tvar button = $(\"\");\n\t\t\t\t$(button).addClass(\"post_control archivebutton-button\");\n\t\t\t\t$(button).attr(\"archiveurl\", archiveurl);\n\t\t\t\t$(button).attr(\"title\", \"Mirror Button\");\n\t\t\t\t$(button).click(function() {\n\t\t\t\t\twindow.open(archiveurl, '_blank');\n\t\t\t\t});\n\t\t\t\t$(\".post_controls_inner\", this).prepend(button);\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\t$(\".share_social_button\", this).click(function() {\n\t\t\t\t\tvar menuitem = $('
');\n\t\t\t\t\t$(\"a\", menuitem).attr(\"href\", archiveurl);\n\t\t\t\t\t$(\"a\", menuitem).attr(\"target\", \"_blank\");\n\n\t\t\t\t\tsetTimeout(function() { //Make sure the pop-up has popped up\n\t\t\t\t\t\t$(\".share_reddit\", \"#dashboard_index > div.popover--post-share-popover\").after(menuitem);\n\t\t\t\t\t}, 10);\n\t\t\t\t});\n\t\t\t}\n\n\t\t});\n\t}\n\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAABtlBMVEUWWYsWWYwXWYwXWY0XWo0YWo4YW44YW48YXI8YXJAZXJAZXJEZXZEZXZIZXpIaXpIaXpMaX5MaX5QbX5QbX5UbYJUbYZYbYpccYpgcY5gcY5kcY5odZJodZZsdZZweZp0eZp4eZ58fZ58faJ8faKAfaKEfaaEfaaIgaqMgaqQga6Qga6UgbKUhbachbagibqkib6kib6oicKwjca4jcq4kaZ0kaZ4kc7Akc7EkdLIkdbMldrUld7Uld7Yld7cleLcmebkmebome7sme7wne7wnfL0nfL4nfb4ofsAofsEof8IogMMpgMQpgcQpgcUpgsYwdKg3eatThaxTha1Thq1Th65Th69Uh7BUiLBUibBVibJVibNVirNWi7NWjLRWjLZXjbhXjrdXj7lYj7pYkLxYkbxZkr1Zkr9Zk79ZlMFalcJblcFblsRbmMZcmMhcmclcmslcm8tcnMxcnM1dnc5enMtzosV3psp3p8x5rNN5rNR6psh6q9GFq8eOss2QssyWt9Cfv9ihw96tx9uuyNy70eLE1+XK2+fU4u3f6vHj7fXj7vbk7PPq8fbs8vfv9Pjx9fn///9KfHrSAAAB5klEQVQ4EQXBTQqoYxgG4Ot5fTgSM5L8Fs6RQqeOY2APBnaADViMLEAWQMnESIyOsQUgvxEZ8X3vfbuueRsAAABwbFNjVKcDdNCBI6YTQydGwdRop46YTgHAFJjiyLRTrz4NwOfo6uzBca2wXn36vwc+nZrO68/sTmcPxZHgtWd/PZ8KENvUZAqraV5/7pev/9Om2a2d3Sa7O+lx4XlPvMM1SiLAFI5Sf/+OttPxqNsA3xrHht/umQJ3HvMCwL1Oj92p7Bod3njx3wc/Rrl785zOEaWh1N2bP//zUoBqdSXZkuzuvd+49dMX226ys6PZPbah0da87Ml3SUantdlHOyQF/vqx02qnapseF/RiuuL7b6x45/wMsaeO6Gim7NHM5ZXH3fpuWm1mnTun5trJPvW8cr7Jm+fecZ3J6r4q13WdZyK5zvdvZD/03rnr2td5pMbt24BWH/7jxt6PNFV6JGvfYzrqTlKf/PTB+dFTaVwrc1ziS4A7vcwP7j/yPZFwBAAk8GeCas1R1aWGSjudD4dOpea4pmNTg+wsZTpi49h1316ZkRVvvQUAV6dHsk6t6WxfTcZUVzvTa8zcmJaFrKyYrhgjqyNrHgzTMTEKWLFiZcUcyAKALACYhU6s6XSaBTJjarb/AQ4eh7vhlccfAAAAAElFTkSuQmCC","css":".archivebutton-button{\n\theight: 26px;\n\twidth: 26px;\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAAA21BMVEUAAAChoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaFRSdv6AAAASHRSTlMAAQIDBAUHCAsNDg8QExQYGyIjJCUmKC4vMTQ2O0BERUdJVlliZ2lrbXx/hYyPlJ6ipairur7Dx87R2dzg4ujr7e/x8/X5+/21Zql0AAAAwklEQVQYGb3BeT8CQQDH4W/FOmLcWkdi3DkjZzmy6Pf+X5GZ3cZ8on95Hv5KZW3/eG+1xG87mbzuEj81FdQZ1lA0SzLJt3JP0U1LepxjYFm5fjrVUeE9obAt72MRJh5UqFM4kpPN44zfKbeFVzqV82rIjbXlTeOdycmqDJTbcu43gAV5b7vWJoC19la5AzhXYABFK3QUGEDRJS8KDKCoR0uBARQ9sa7gsFbbVHQC1xqpPwOVK43wmeKlF88a1m1W+VdfLdJV4tB4RlMAAAAASUVORK5CYII=);\n}","title":"Mirror Button","description":"A button to easily backup posts","developer":"Legoben","version":"1.0.1","details":"This extension provides a button that will create a mirror of a post on either archive.org or archive.is","frame":"false","beta":"false","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/mute.json b/Extensions/dist/mute.json
new file mode 100644
index 000000000..3a831cd83
--- /dev/null
+++ b/Extensions/dist/mute.json
@@ -0,0 +1 @@
+{"id":"mute","script":"//* TITLE Mute! **//\n//* VERSION 2.4.0 **//\n//* DESCRIPTION Better than "shut up!" **//\n//* DETAILS This extension allows you to hide text and answer posts by an user while still seeing their other posts. Useful if a blogger has nice posts but a bad personality. Please note that you'll need to re-mute them if a user changes their URL. **//\n//* DEVELOPER STUDIOXENIX **//\n//* FRAME false **//\n//* BETA false **//\n//* SLOW true **//\n\nXKit.extensions.mute = new Object({\n\n\trunning: false,\n\tslow: true,\n\n\tpreferences: {\n\t\t\"title\": {\n\t\t\ttext: `Muted users
Add
`,\n\t\t\ttype: \"separator\"\n\t\t}\n\t},\n\n\tmuted: [],\n\n\tframe_run: function() {\n\n\t\tif ($(\".btn.icon.unfollow\").length > 0) {\n\n\t\t\tXKit.extensions.mute.load_muted();\n\n\t\t\t$(\"#xkit-mute-button\").remove();\n\n\t\t\tif ($(\".btn.icon.unfollow\").hasClass(\"hidden\")) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$(\".btn.icon.dashboard, .btn.icon.unfollow, .btn.icon.reblog, .btn.icon.follow\").html(\"\");\n\t\t\t$(\".btn.icon.dashboard, .btn.icon.unfollow, .btn.icon.reblog, .btn.icon.follow\").addClass(\"no_label\");\n\n\t\t\tvar m_username = $(\".btn.unfollow\").attr('data-tumblelog-name');\n\n\t\t\tvar m_caption = \"Mute\";\n\n\t\t\tif (XKit.extensions.mute.return_user_object(m_username) !== -1) {\n\t\t\t\tm_caption = \"Unmute\";\n\t\t\t}\n\n\t\t\tvar m_html = \"\" + m_caption + \"\";\n\n\t\t\t$(\"#iframe_controls\").find(\".btn.icon.unfollow\").before(m_html);\n\n\t\t\t$(\"#xkit-mute-button\").click(function() {\n\n\t\t\t\tvar user_url = $(this).attr('data-username');\n\n\t\t\t\tif (XKit.extensions.mute.return_user_object(user_url) !== -1) {\n\n\t\t\t\t\tfor (var i = 0; i < XKit.extensions.mute.muted.length; i++) {\n\n\t\t\t\t\t\tif (XKit.extensions.mute.muted[i].username === user_url) {\n\t\t\t\t\t\t\t//console.log(\"User found, removing from list.\");\n\t\t\t\t\t\t\tXKit.extensions.mute.muted.splice(i, 1);\n\t\t\t\t\t\t\tXKit.extensions.mute.save();\n\t\t\t\t\t\t\t//XKit.extensions.mute.do_posts(true);\n\t\t\t\t\t\t\tXKit.extensions.mute.frame_run();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t//console.log(\"User could not be found on the list!..\");\n\n\t\t\t\t} else {\n\n\t\t\t\t\t//console.log(\"Adding user to mute list.\");\n\n\t\t\t\t\tif (XKit.extensions.mute.muted.length >= 101) {\n\t\t\t\t\t\tXKit.window.show(\"Can't mute!\",\n\t\t\t\t\t\t\t\"You have over a hundred muted blogs. Please remove some before muting people.\",\n\t\t\t\t\t\t\t\"error\",\n\t\t\t\t\t\t\t'
\";\n\n\t\t$(menu_box).find(\".open_in_tab\").parent().before(m_html);\n\n\t\tvar m_target = e.target;\n\n\t\t$(\".xkit-mute-button-\" + user_url).unbind('click');\n\t\t$(\".xkit-mute-button-\" + user_url).bind('click', function() {\n\n\t\t\tXKit.extensions.mute.toggle_mute(user_url);\n\t\t\tsetTimeout(function() { $(\"#glass_overlay\").trigger('click'); }, 10);\n\t\t\t$(\"#glass_overlay\").removeClass(\"show\");\n\t\t\t$(m_target).trigger('click');\n\n\t\t});\n\n\t},\n\n\ttoggle_mute: function(user_url) {\n\n\t\tif (XKit.extensions.mute.return_user_object(user_url) !== -1) {\n\n\t\t\tfor (var i = 0; i < XKit.extensions.mute.muted.length; i++) {\n\n\t\t\t\tif (XKit.extensions.mute.muted[i].username === user_url) {\n\t\t\t\t\tconsole.log(\"User found, removing from list.\");\n\t\t\t\t\tXKit.extensions.mute.muted.splice(i, 1);\n\t\t\t\t\tXKit.extensions.mute.save();\n\t\t\t\t\tXKit.extensions.mute.do_posts(true);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconsole.log(\"User could not be found on the list!..\");\n\n\t\t} else {\n\n\t\t\tconsole.log(\"Adding user to mute list.\");\n\n\t\t\tif (XKit.extensions.mute.muted.length >= 101) {\n\t\t\t\tXKit.window.show(\"Can't mute.\", \"You have over a hundred muted blogs. Please remove some before muting people.\", \"error\", \"
\";\n\n\t\tXKit.window.show(\"Muting options for \" + ud,\n\t\t\t\"Hide the following types of posts:\" +\n\t\t\tm_html +\n\t\t\t\"
Hide original posts by this user (applies to all post types)
\" +\n\t\t\t\"
Hide posts this user reblogs (applies to all post types)
\" +\n\t\t\t\"Posts with the selected type will not be shown on your dashboard, without any indication that they are hidden.\",\n\n\t\t\t\"question\",\n\n\t\t\t'
\");\n\n\t\tif (XKit.extensions.mute.muted.length >= 4) {\n\t\t\t$(\".xkit-muted-user:last-child\").css(\"border-bottom\", \"0\");\n\t\t}\n\n\t\t$(\".xkit-unmute-user-button\").unbind(\"click\");\n\t\t$(\".xkit-unmute-user-button\").bind(\"click\", function() {\n\n\t\t\tvar m_username = $(this).attr('data-user-name');\n\n\t\t\tfor (var i = 0; i < XKit.extensions.mute.muted.length; i++) {\n\t\t\t\tif (XKit.extensions.mute.muted[i].username === m_username) {\n\t\t\t\t\tXKit.extensions.mute.muted.splice(i, 1);\n\t\t\t\t\tXKit.extensions.mute.save();\n\t\t\t\t\tXKit.extensions.mute.do_posts(true);\n\t\t\t\t\tXKit.extensions.mute.cpanel(mdiv);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t});\n\n\t\t$(\".xkit-muted-user\").unbind(\"click\");\n\t\t$(\".xkit-muted-user\").bind(\"click\", function() {\n\n\t\t\tvar m_username = $(this).attr('data-user-name');\n\t\t\tXKit.extensions.mute.show_window(m_username);\n\n\t\t});\n\n\t}\n\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTUzRDRDRjhCQ0Q4MTFFMjlEODhCN0Q1MDg3NTkwRDkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTUzRDRDRjlCQ0Q4MTFFMjlEODhCN0Q1MDg3NTkwRDkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxNTNENENGNkJDRDgxMUUyOUQ4OEI3RDUwODc1OTBEOSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoxNTNENENGN0JDRDgxMUUyOUQ4OEI3RDUwODc1OTBEOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgIQgzkAAAiRSURBVHjafFZbiCVH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","css":".tumblelog_menu .tumblelog_menu_link.xkit-mute-button:before {\n\tbackground: no-repeat 50% 50% url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTNENEM3OEJDMUE5MTFFMkEzOTZFQzEzOTg3NzFDMDUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTNENEM3OENDMUE5MTFFMkEzOTZFQzEzOTg3NzFDMDUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpEQ0EwMzY5RUMxNUQxMUUyQTM5NkVDMTM5ODc3MUMwNSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFM0Q0Qzc4QUMxQTkxMUUyQTM5NkVDMTM5ODc3MUMwNSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Ptqh5IgAAAEQSURBVHjaYvz//z8DJYCJgYZAAoirgFgAnyIWHOKaQFwMxHxA/IdUA1yAOAWIWYH4MxAzQsV5oXwYABn+GWSAGhCLQAVVgdgPSRFI828glgLiGiA+AsTLgFgUiJuA+DjIgFog5sLjSpAB+kAsDsTBQMwOxLpALAbE5iAD/hEITE4g3g7EHEAcCcQ+UPEHQNxDTDTCwuAkEP9CEr8DxM9ZoIGFD/yChk0p1DUfgJgfGtg/QS54DBX8iMOAv0AsC8TCQPwIatAcqJweIzQqWaGpEhT/6UAsBFXwBYizobQV1NmvoHLWQHybEUcKzANidTQDsAJmLGJfoPENcoUKEG8G+ZXc/GBHII0wMFKanQECDACKtzHz2ySXWwAAAABJRU5ErkJggg==');\n}\n\n.tumblelog_menu .tumblelog_menu_link.xkit-mute-button.already_muted:before {\n\tbackground: no-repeat 50% 50% url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTNENEM3OEZDMUE5MTFFMkEzOTZFQzEzOTg3NzFDMDUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTNENEM3OTBDMUE5MTFFMkEzOTZFQzEzOTg3NzFDMDUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpFM0Q0Qzc4REMxQTkxMUUyQTM5NkVDMTM5ODc3MUMwNSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFM0Q0Qzc4RUMxQTkxMUUyQTM5NkVDMTM5ODc3MUMwNSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Puh+nEYAAAEdSURBVHjatNMxSwJxGMfxu+M0Ko2KiKxFUINoanKppuYaGnsBDYYQDlIQbb0HR4caBIdeQtAeRO1CSFNhGA1qXt8fPIODd1dIf/gMd8fz8Dz/5zk3CAJnkuM5/3hWcI55VRnGDwneQAVzGPy1hT1cYgFfcDmOySCPGop6pwrWsWTBBeyPJHPRx6pVcopH3KKsZyW4wExElUpwiGVc48wqfMGBWhjGXOY0bpDFLB6wg3ts/maMauMNbWTwai134StBIiZBzwLWLFhJ3pHWvXjWSwcfIQm+1StaNpUt3GEbzyrPtyo8m/8xFi34EyUkoZ2v4skqOLKpjN3AKzRRR2rkm1rJoYZiVN9TOEFD2xi1ynFnVzsSlcCd9Hf+EWAAZgtynxHTlewAAAAASUVORK5CYII=');\n}\n\n.xkit-mute {\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODJBQzQ2QzMwMjczMTFFM0IwRTREQUE2OUI0ODg5QzAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODJBQzQ2QzQwMjczMTFFM0IwRTREQUE2OUI0ODg5QzAiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4MkFDNDZDMTAyNzMxMUUzQjBFNERBQTY5QjQ4ODlDMCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4MkFDNDZDMjAyNzMxMUUzQjBFNERBQTY5QjQ4ODlDMCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PrLU4L4AAAB/SURBVHjaYvz//z8DJYCJgUIwiA1gZGSUAuIiQgaw4NDsBqTckPiCwMB+j85GMQAo0YPDMEEgVQ2kV0CFIoDsVpghLIScCFII1RwBFVqB7AKKA5GgC6BeANmO7IW78DDBlhKRAxEoX4IvEEEKsGIgkALiIlzyMMw4mhcYAAIMAOJZXu4qGZEQAAAAAElFTkSuQmCC);\n}\n\n.xkit-mute.already_muted {\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjQ0NzQyNEMwMjg0MTFFM0IwRTREQUE2OUI0ODg5QzAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjQ0NzQyNEQwMjg0MTFFM0IwRTREQUE2OUI0ODg5QzAiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4MkFDNDZDNTAyNzMxMUUzQjBFNERBQTY5QjQ4ODlDMCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4MkFDNDZDNjAyNzMxMUUzQjBFNERBQTY5QjQ4ODlDMCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PkhDTFMAAACfSURBVHjaYvz//z8DJYCJgUJAXwMYGRkFiTYAqFgKiItgGqGaq4G0CUEDgIrcgBRIsxRUCMY+DcRuyGpZkDT14HH9YSA2BeJdIBrkOmDsPSMlDO4CsQ5MExBw0j0WdID4CsjpUP53jDAAOq8ELRCRA0sbiDcCsS0Qv0PyClgjVgwN9SIoWxCKm4HYBFkdIyl5AZQWgOrfo4gN/cwEEGAAjjpHufip7t0AAAAASUVORK5CYII=);\n}\n\n.xmute-muted {\n\tdisplay: none !important;\n}\n\n.xkit-muted-user {\n\tborder-bottom: 1px dotted rgb(190,190,190);\n\tpadding: 0px 15px 0px 35px;\n\tfont-size: 12px;\n\theight: 34px;\n\tline-height: 34px;\n\tposition: relative;\n\tcursor: pointer;\n\tcolor: rgb(120,120,120);\n}\n\n.xkit-mute-options {\n\twidth: 100%;\n\theight: 40px;\n\tmargin-top: 10px;\n\tmargin-bottom: 10px;\n}\n\n.xkit-mute-option {\n\tfloat: left;\n\twidth: 50px;\n\theight: 40px;\n\tdisplay: inline-block;\n\tbackground: rgb(240,240,240);\n\tborder: 1px solid rgb(190,190,190);\n\tborder-left: 0; background-repeat: no-repeat;\n\tbackground-position: 50% 50%; cursor: pointer;\n\tbox-shadow: inset 0px 1px 2px rgba(255,255,255,0.73), 0px 1px 2px rgba(0,0,0,0.11);\n}\n\n.xkit-mute-option:hover {\n\tbackground-color: rgb(245,245,245);\n}\n\n.xkit-mute-option:active {\n\tbox-shadow: 0px 1px 2px rgba(0,0,0,0.11);\n\tbackground-color: rgb(237,237,237);\n}\n\n.xkit-mute-option.selected {\n\tbackground-color: rgb(230,230,230);\n\tbox-shadow: inset 0px 1px 1px rgba(0,0,0,0.21), 0px 1px 2px rgba(0,0,0,0.11), inset 0px -1px 1px rgba(255,255,255,0.23) !important;\n}\n\n.xkit-mute-option.regular {\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAYAAABWk2cPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDZGNjZFRUYxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDZGNjZFRjAxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0NkY2NkVFRDFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0NkY2NkVFRTFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsJAvbIAAAGdSURBVHja7NbJK0VhGMfxY8otKUMyRIaNlLmrEEIiEaJY8xdYsFOUlViwtbNhK5EpEkrpWiArC5GFoRQbynB9T/3U6aTc18JQ561P5z3vGZ73fd7ndG9YMBi0frqFW7/QvKBe0P8bNPKzQb/f7x4aRSneMIZdkyCBQODroK6WjkFE6/zONOh30tviCGi3RiSYZs80aLeO27hEChpc98RhGJs4xg7GkfOdoLmoVH/CkdYe18pmMYI6TaoKA1hEomnQDvhwg3WsabxWL7dUYM2wfzl6kYV6PCJP10MOGoEu9TfwpJk/aE9bde0M5ZrIMjJR6Hh3tEnQIpSof41q5ONcY5063iIeQ9rzQ0w6CipoUmldjuv94mw1SEUalrSABczjAnNIMinvKLSpb8/+RPe+KV0ViEGTXmwH3Ee7nslGrOk3ValUWkrbjGuv91CmbGxpPEOTsFTJPvWfQ93TPh1fVETO9opV9e1iOsWRUr0i97jSPQWhrnRa396D0utuU/pmP9LaoFUn40BVXqzzO/fDYd4fMy+oF/TPB30XYAA/FlCkcqgrRwAAAABJRU5ErkJggg==);\n}\n\n.xkit-mute-option.photo {\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAYAAABWk2cPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDZGNjZFRjMxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDZGNjZFRjQxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0NkY2NkVGMTFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0NkY2NkVGMjFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PklZnYUAAAF6SURBVHja7JXNKwVRGIfdcRVKIhHJSmQhKWwslBUbWSibG9a3lIWVjaIsxNLKBkluyVcs/AEiO8nGQjefC2woF8V4Tr3qNM3cc+c2WZ23nuZ89f7m954zZ2Ku6xb8d8SsqBW1opGJXgw1qUcdVMlQDaxCuWfpFyThUvqvkG7duvLNGze81CgsaKJBUQobWv8TZmDOb7FjSDYfIJiGTVjT3Km4gWm4htmgpCanFZ6+cjAJO1ALhXAPHbACB+LwGZbyFf3R2mrzE+LyENpk/A7GoQ/WpaQD2ZLGQxy6bTiFc6iUsQyUifMeSMGUKZETQlQdlDERfJMyt0CzuFRHfRe+TYnCOH2AYWmPiMBfHMmzEd7FfSROlcMnOPYI6qHEiqN0OgjLcJtljSpzUZR7mhAniwHzqrQTuSRyQsyXyGHq91nXDXtQnYuoqbyP0KD11d27D2dwInduO/T6GMjkK5qUctZ73HdClzb24flUXrJdg/Z/akWtaKj4FWAAOdZxVglFqeYAAAAASUVORK5CYII=);\n}\n\n.xkit-mute-option.quote {\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAYAAABWk2cPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTgwREFEQzYxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTgwREFEQzcxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0NkY2NkVGNTFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0NkY2NkVGNjFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pp21znIAAAFvSURBVHja7JXNK0RRGMZdH5OSmgk1ZWEjCmUjElnNjiysmFKSBRZIFlZWNpKNz0lCdoqUlSWK3Sws+CuoSdJQXL9T7+J2u+eYMyarc+pXz9z3ueeZ9517z3i+75f99/JcqAt1oSUJzWW8qMt90A77v+yrPCnYjk/7X+FipcUXHIc9qIFPONb4BuEIGqAWVsOG8gIDF+FEAs/gRuNLw4UEXsNllKmQTqdgQ/QmLEDUbzIkHVbBKUzCezGhvbAlWm00r/E1y7hjMoUJyOs2NY03Jp1VwwvM6R5GmUQdfIgvb+rEFDoCXaIrYA1mIRHy9cOwaDX2ZViCxmJC0wEdl5HtwC20BGqjAa2mMgbrcAc9tqGdmusdsBu4t1vja4JD29CEoTYAraLrDb4229A3Q029FknRr7bHoCn00VBTR9uz6GwpQzOG2hU8iT6Ab40vaxt6DisR75w63makW7Xu5XMu5HuQJ979n7pQF/q39SPAAIOXa93gNF/cAAAAAElFTkSuQmCC);\n}\n\n.xkit-mute-option.link {\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAYAAABWk2cPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTgwREFEQ0ExQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTgwREFEQ0IxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBODBEQURDODFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBODBEQURDOTFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Puk0h+sAAAGqSURBVHja7NZNKARhHMfx3fVyQF6Kg7eUXLQHysUmL+HgtUjhILJRilyk3F04SHJyUBJyk1YSeYkktZID2igHB29Rsl4Om/Wd+h+mzczq2XLYdurT7Owzz/x2Zv7Pv7X6/X7Lf2/WSGgkNDxDG9dHAr8qQyccyIIN93BjEWv6k111Y79eN/qPPy4RE3BKkH7LE+1YQT/uzC5m+0NgElbRY3L+u+ybsSVPIaTQSVQYjO2hCKmowTXsmEOMamg5ug3GHtCCLwziCB1yXIVW1VCnydg2XrCEcUzhGLcy3qsa6jAZ0yo2Bbl4xT5ikSDjBUYTg1VvRsDxE3ZQDK8UUCU8eMMo0uXcZNVQ/ZPYlWXxKJ+1dxeFOPShXmog6BYsVAvIgQ8DSJPlU4ghaRYbBnO9qu/0VPYfuECbPNpvXEq40eZRvdN5NCEepZhGNg7wiQaTuQuqd+rCpry7GQnU1u2yFE2JwbxzzKreqU+KRAvOlwZwJZWZaTDnGV1Szcpt8Aa1unVoNwk8k3Z4EmrvtUhPrZYucyjNQN/stYIbliXjjvxziISGb+iPAAMAcz18wE4/HnIAAAAASUVORK5CYII=);\n}\n\n.xkit-mute-option.chat {\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAYAAABWk2cPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTgwREFEQ0UxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTgwREFEQ0YxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBODBEQURDQzFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBODBEQURDRDFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pmc6aAoAAAEzSURBVHjaYvz//z8DvQHjqKWjlo5aSjVL7ebf4AZSnUAcAsS8BMz6DsRHgLgUiG+DBA4lamBVyELAoG4gziTSA1xA7A/EfEDsCsR/cSlkImBQJBmhZwK1mIFcS7nJjTZ8koSC9x8S+xkQswKxKJT/GIhBCYIDGpSSSHp+UOJTZNABxLOB+A+UfwaIzwFxL1QOBniA2IdalrIB8UpQogbi+UD8E4jfQX3KhqSOGSofQQ1LfwGxIxAXAPF6IL4FxWZAbIAlJbuRG6fI4BsQqyPF3R9o3AkDMTua2hVAnE0NS52AWASIpYDYC4jloBa/gQY1DHwF4lxoYUGWpchJPwqJrYxHz1+kxEZWnJJTMDMRMpeQpdfIsPQ9pfm0BIhfkWAhKG5boYlutD4dtXTUUuoAgAADAGzGZBT0+yuKAAAAAElFTkSuQmCC);\n}\n\n.xkit-mute-option.audio {\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAYAAABWk2cPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RDAxMTc2OTExQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDAxMTc2OTIxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBODBEQUREMDFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpEMDExNzY5MDFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmgJCVkAAAGISURBVHja7NY/KEVRHMDxd3kxyKoMMmCxeFneoje8wSBiMOgVykCkPEYyUCYDBgsRr2SUwkKUyeDPYDBICovVS/l/fU/9bp1u7nvvnluk7qlPt/On8zvn/s49Xcu27chvl6LIH5QwaBj0/waN5upcTx+7m6rRj1bUyKIfcIhlnOmDe+cTgXfajUuM4x2bal14xABOMV3InFEfATO4RjuOXP2NWMAkyjEaNKe1WMQdkj8EVOUcLThBGm1Bg47J6kckf14li2Goy3wi19z5gpahAzfYLmCB6iAdII4606DqhFbiAmuY0foqUKXV1anelbyrkjANmpFnJ3rQrPWlUK/Vk5LXIanPmQZtkPyoyT6Ec+q78KzN8abtOCWpMT5I+3KQ1NgvaYsL9bpnpc35G9iTlBh/p69YQkzqn/JswpXkbVXaLHnuaOONd6pP4EysLoJB3GPLtdNY0Au/1GP8C0rkKnzye6Xme71Tkp9i9Ln6brGi1Z1XvyEHLOs1qRX+DYZBw6B+yrcAAwC9FkublkrqIgAAAABJRU5ErkJggg==);\n}\n\n.xkit-mute-option.video {\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAYAAABWk2cPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RDAxMTc2OTUxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDAxMTc2OTYxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpEMDExNzY5MzFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpEMDExNzY5NDFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PlXaRegAAAFvSURBVHja7NbNKwRxHMfxXYsL+QdwEScHBxlyVPKQEkkO/oF18XwQKSSHvbg5c/TwH9iLXLQlFwc5SFKK5CGUxXp/63PYNjvGzoTDfOvVtL+Znc9vfvOd2Y1mMpnIb1dR5A8qDA1DA6lit53x6UXb9GEG9bjCOpbQhBU4eMIOZnFnX1pLzBcWSnViCzF9rsGCJtCKKo2XYwSVGMBbwVdKTWQFWp2hDIM5x9kKvKAXLdj3c0+rtb3FPcZxrDF7lV1rOW0tdzVe57eRzrXdQDse0KixKJLoQQodGj/x1UhUAm0YQ5euInuiQ2jWvSzFNg78hibVTHNowA3ec46pwCU2sfzF/h+H1mq54jp5vrJuvcCj+mAUU4WGnmprs/9wOc7u76GWehX9bqHfNZKjk9ljU+LCJp/GsAJ9LW9Kj4uXcvTCCOTdG/MYalf6HFSo1x+FI3TjNYgTpj2G2nO6h0l1cf6uC/+YhaFh6L8P/RRgAJzXR6+2XwoJAAAAAElFTkSuQmCC);\n}\n\n.xkit-mute-option.asks {\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAYAAABWk2cPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6M0YwNkY2NzkyNjEwMTFFM0E4QURBMkY5NDVFMjREMzgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6M0YwNkY2N0EyNjEwMTFFM0E4QURBMkY5NDVFMjREMzgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozRjA2RjY3NzI2MTAxMUUzQThBREEyRjk0NUUyNEQzOCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDozRjA2RjY3ODI2MTAxMUUzQThBREEyRjk0NUUyNEQzOCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmiD5J8AAADXSURBVHjaYvz//z8DvQETwwCAUUtHLaUKYCFGkYmJCYwpAMQOQGwA5R8A4gtA/AHEOXPmDPUshQKQRRuAWB5JrB6IHwJxANRyqgavANRXMAs/IsnJQ+UEqG1pAhDzQ9kboRYIIlnODw12qlpqgMSeAKU/oAWpAFUTEtSiBVD2BSTf2yOpuUBtSy9gCe75SPyFtEhIyEABzcJGqCNoWjgEoFnYQI8SCTnBHKBZiYQGNiBZdoEcS8nxKSgl74dig+FV4OPJPh/IsZRxtGE2aumopYPeUoAAAwBfSihME+bbPgAAAABJRU5ErkJggg==);\n}\n\n.xkit-mute-option:first-child {\n\tborder-radius: 6px 0px 0px 6px;\n\tborder-left: 1px solid rgb(190,190,190);\n}\n\n.xkit-mute-option:last-child {\n\tborder-radius: 0px 6px 6px 0px;\n}\n\n.xkit-muted-user:hover {\n\tcolor: black;\n\tbackground: rgb(245,245,245);\n}\n\n.xkit-unmute-user-button {\n\tposition: absolute;\n\ttop: 0; left: 15px;\n\tcolor: red; opacity: 0.7;\n\tcursor: pointer;\n}\n\n.xkit-unmute-user-button:hover {\n\topacity: 1;\n}\n\n#xkit-control-panel-mute.no-muted-users {\n\tpadding: 15px; font-size: 12px;\n\tcolor: rgb(110,110,110);\n\ttext-align: center;\n\tline-height: 24px; padding-top: 33px;\n}","title":"Mute!","description":"Better than "shut up!"","developer":"STUDIOXENIX","version":"2.4.0","details":"This extension allows you to hide text and answer posts by an user while still seeing their other posts. Useful if a blogger has nice posts but a bad personality. Please note that you'll need to re-mute them if a user changes their URL.","frame":"false","beta":"false","slow":"true"}
\ No newline at end of file
diff --git a/Extensions/dist/mutualchecker.json b/Extensions/dist/mutualchecker.json
new file mode 100644
index 000000000..fa8317d42
--- /dev/null
+++ b/Extensions/dist/mutualchecker.json
@@ -0,0 +1 @@
+{"id":"mutualchecker","script":"//* TITLE Mutual Checker **//\n//* VERSION 2.0.4 **//\n//* DESCRIPTION A simple way to see who follows you back **//\n//* DETAILS Adds a small icon and "[user] follows you" hovertext to URLs you see in post headers (when appropriate).
Only checks the URL when the person directly made/reblogged/submitted/published the post, and can only check main blogs. **//\n//* DEVELOPER New-XKit **//\n//* FRAME false **//\n//* BETA false **//\n\nXKit.extensions.mutualchecker = new Object({\n\n\trunning: false,\n\tmutuals: {},\n\n\tpreferences: {\n\t\t\"main_blog\": {\n\t\t\ttext: \"Blog to check for follow-backs on:\",\n\t\t\tdefault: \"\",\n\t\t\tvalue: \"\",\n\t\t\ttype: \"blog\"\n\t\t},\n\t\t\"put_in_front\": {\n\t\t\ttext: \"Place mutual icon before, not after usernames\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t}\n\t},\n\n\tcpanel: function() {\n\t\t$('select[data-setting-id=\"main_blog\"] option').first().remove();\n\t},\n\n\trun: function() {\n\t\tthis.running = true;\n\t\tXKit.blog_listener.add(\"mutualchecker\", this.init);\n\t\tlet today = new Date();\n\t\tif (today.getMonth() === 3 && today.getDate() === 1) {\n\t\t\t$(document.body).addClass(\"xkit-april-fools\");\n\t\t}\n\t},\n\n\tinit: function(blogs) {\n\t\tif ($.inArray(this.preferences.main_blog.value, blogs) === -1) {\n\t\t\tthis.preferences.main_blog.value = blogs[0];\n\t\t}\n\t\tXKit.tools.init_css(\"mutualchecker\");\n\t\tthis.add_follower_icons();\n\t\tthis.add_post_icons();\n\t\tXKit.post_listener.add(\"mutualchecker\", this.add_post_icons);\n\t},\n\n\tadd_follower_icons: function() {\n\t\tvar following = XKit.interface.where().following;\n\t\t$(\".follower\").each(function() {\n\t\t\tif (following || !$(this).find(\".follow_button\").length) {\n\t\t\t\tvar $name_div = $(this).find(\".name-link\");\n\t\t\t\tvar url = $name_div.text();\n\t\t\t\tXKit.interface.is_following(url, XKit.extensions.mutualchecker.preferences.main_blog.value)\n\t\t\t\t.then(follow => follow && XKit.extensions.mutualchecker.add_label($name_div, url));\n\t\t\t}\n\t\t});\n\t},\n\n\tadd_post_icons: function() {\n\t\t$(XKit.interface.get_posts(\"mutualchecker-done\")).each(function() {\n\t\t\tvar $post = $(this).addClass(\"mutualchecker-done\"), json_obj;\n\t\t\tif ($post.hasClass(\"is_private_answer\")) {\n\t\t\t\ttry {\n\t\t\t\t\tjson_obj = JSON.parse($post.find(\".post_avatar_link\").attr(\"data-tumblelog-popover\"));\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tXKit.extensions.mutualchecker.check(json_obj, $post.find(\".post_info_submissions\").first());\n\t\t\t} else {\n\t\t\t\t$post.find(\".post_info_link[data-tumblelog-popover]:not(.reblog_icon + .post_info_link, .tf2_icon + .post_info_link), .post-info-tumblelog > a[data-tumblelog-popover]\").each(function() {\n\t\t\t\t\tvar $link = $(this);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tjson_obj = JSON.parse($link.attr(\"data-tumblelog-popover\"));\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tXKit.extensions.mutualchecker.check(json_obj, $link);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t},\n\n\tcheck: function(json_obj, $link) {\n\t\tif (json_obj.following && !json_obj.customizable) {\n\t\t\tif (typeof this.mutuals[json_obj.name] === \"undefined\") {\n\t\t\t\tXKit.interface.is_following(json_obj.name, this.preferences.main_blog.value)\n\t\t\t\t.then(follow => {\n\t\t\t\t\tif (follow) {\n\t\t\t\t\t\tthis.add_label($link, json_obj.name);\n\t\t\t\t\t\tthis.mutuals[json_obj.name] = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.mutuals[json_obj.name] = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else if (this.mutuals[json_obj.name]) {\n\t\t\t\tthis.add_label($link, json_obj.name);\n\t\t\t}\n\t\t}\n\t},\n\n\tadd_label: function($name_div, user) {\n\t\tif ($name_div.hasClass(\"post_info_submissions\")) {\n\t\t\t$name_div.html('' + user + '' + $name_div.text().trim().substring(user.length));\n\t\t} else {\n\t\t\t$name_div.addClass(\"mutuals\").attr(\"title\", user + \" follows you\");\n\t\t\tif (XKit.extensions.mutualchecker.preferences.put_in_front.value) {\n\t\t\t\t$name_div.addClass(\"mutuals-front\");\n\t\t\t}\n\t\t}\n\t},\n\n\tdestroy: function() {\n\t\tthis.running = false;\n\t\tthis.mutuals = {};\n\t\tXKit.post_listener.remove(\"mutualchecker\");\n\t\t$(\".mutuals\").removeAttr(\"title\").removeClass(\"mutuals\").removeClass(\"mutuals-front\");\n\t\t$(\".mutualchecker-done\").removeClass(\"mutualchecker-done\");\n\t\tXKit.tools.remove_css(\"mutualchecker\");\n\t}\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTZEaa/1AAACGUlEQVRIS7XTzU8TQRgG8PeP62GzaW3TLxMFCR68SPDQBS4YoQYOiKCiFxMPbWH5iJAaAwmVCATx4gE8EBJNKX6gUMCP+HV1Z+fZnTrTylCyv9sz77zzpJuU/gSMfgcs+IJfAaOf9Ryvj7UbIS3nsvNYqo9+qI7ms7GQGUtpyeS2sFYffZdVn/bHQqGW0TXkM1ILXt695Pzya7kK8hnRN9m6W9AEM903u4NHBPoqe3GnFRun1zONRwT6IltzC3qmEPVsP7rqFqhbdCzjBd2TiJomu1lBnS06EvgljxFJXB4ovsXsJF4BolBbsHzvSjKZiPj/MDM9UNzD7CSNCw5lq6PuJ7IRfW9meuNutxHveLiKQ5/NC5StQ6rKVkZYQZeN6LO72BNc68gKTj18qm5V6UCGgglE38S/BTj18Km6dUD7suXbLezqOKJve/ZmW9j5Rka4re/xaxz6xnmBsrWvX/B/jQs+y56jAFGTV4Ao0Cdh+kbSEWffwWFGkxeu21uYbT4Zs9qjJhsY4fOdw3OvdjHhChYbWQVEgfYEfslnpjrvlypssFGwojj0Ra3ChrvFeQWIAn2ULQ2zT2TlER0Lg2m2LUsPLuCCI88LaraAPsie3WIFmTyiI59hyyr1Tu0J6BTomOmNNCh4LyvxghyipoZb9E5WGrroXG1KIlvEIwLtyhabLDBTHQ8W8UYNqgQs+IKdgFE5UOXyX4UwNMSHFXXQAAAAAElFTkSuQmCC","css":".mutuals::after, .mutuals::before {\n\tfont-family: tumblr-icons, None;\n\tfont-weight: normal;\n\tfont-size: 1.23em;\n\tline-height: 0;\n}\n\n.mutuals:not(.mutuals-front)::after {\n\tcontent: \"\\EA59\";\n\tpadding-left: 0.3em;\n}\n\n.mutuals.mutuals-front::before {\n\tcontent: \"\\EA59\";\n\tpadding-right: 0.3em;\n}\n\nbody.xkit-april-fools .mutuals:not(.mutuals-front)::after,\nbody.xkit-april-fools .mutuals.mutuals-front::before {\n\tcontent: \"\\EAA7\";\n\tcolor: #00b8ff;\n}\n","title":"Mutual Checker","description":"A simple way to see who follows you back","developer":"New-XKit","version":"2.0.4","details":"Adds a small icon and "[user] follows you" hovertext to URLs you see in post headers (when appropriate).
Only checks the URL when the person directly made/reblogged/submitted/published the post, and can only check main blogs.","frame":"false","beta":"false","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/norecommended.json b/Extensions/dist/norecommended.json
new file mode 100644
index 000000000..406ed43e6
--- /dev/null
+++ b/Extensions/dist/norecommended.json
@@ -0,0 +1 @@
+{"id":"norecommended","script":"//* TITLE No Recommended **//\n//* VERSION 2.3.4 **//\n//* DESCRIPTION Removes recommended posts **//\n//* DETAILS This extension removes recommended posts from your dashboard. To remove Recommended Blogs on the sidebar, please use Tweaks extension. **//\n//* DEVELOPER STUDIOXENIX **//\n//* FRAME false **//\n//* BETA false **//\n\nXKit.extensions.norecommended = new Object({\n\n\trunning: false,\n\n\tpreferences: {\n\t\t\"sep-0\": {\n\t\t\ttext: \"Options\",\n\t\t\ttype: \"separator\"\n\t\t},\n\t\t\"no_search\": {\n\t\t\ttext: \"Hide recommended posts from followed searches\",\n\t\t\tdefault: true,\n\t\t\tvalue: true\n\t\t},\n\t\t\"no_pinned\": {\n\t\t\ttext: \"Hide pinned posts\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t},\n\t\t\"hide_recommended_on_blogs\": {\n\t\t\ttext: \"Hide recommended posts under permalinked posts on user blogs\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t},\n\t\t\"hide_posts_completely\": {\n\t\t\ttext: \"Hide posts completely (may break endless scrolling)\",\n\t\t\tdefault: false,\n\t\t\tvalue: false,\n\t\t\tslow: true\n\t\t}\n\t},\n\n\tcpanel: function(div) {\n\t\t$(\"#norecommended-completely-hide-help\").click(function() {\n\t\t\tXKit.window.show(\"Completely hiding posts\", 'If you have endless scrolling enabled and XKit completely hides every single post on the first \"page\" of your dashboard, you may become unable to scroll down to load more posts. Disable this option if you experience an empty dashboard with the loading icon appearing forever.', \"info\", \"
OK
\");\n\t\t});\n\t},\n\n\trun: function() {\n\t\tthis.running = true;\n\n\t\tif (XKit.interface.where().explore) { return; }\n\n\t\tif (XKit.page.react) {\n\t\t\tif (this.preferences.hide_posts_completely.value) {\n\t\t\t\tXKit.interface.hide(\".norecommended-hidden, .norecommended-hidden + :not([data-id])\", \"norecommended\");\n\t\t\t} else {\n\t\t\t\tXKit.interface.react.init_collapsed('norecommended');\n\t\t\t}\n\t\t\tXKit.post_listener.add('norecommended', this.react_do);\n\t\t\tthis.react_do();\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.preferences.hide_recommended_on_blogs.value) {\n\t\t\tthis.hide_recommended_on_blogs();\n\t\t}\n\t},\n\n\treact_do: function() {\n\t\tif (XKit.interface.where().explore) { return; }\n\n\t\t$('[data-id]:not(.norecommended-done)').each(async function() {\n\t\t\tconst $this = $(this).addClass('norecommended-done');\n\t\t\tconst {no_search, no_pinned, hide_posts_completely} = XKit.extensions.norecommended.preferences;\n\t\t\tconst {recommendationReason, blogName} = await XKit.interface.react.post_props($this.attr('data-id'));\n\n\t\t\tif (recommendationReason && recommendationReason.hasOwnProperty('loggingReason')) {\n\t\t\t\tconst {loggingReason} = recommendationReason;\n\t\t\t\tconst is_search = loggingReason.startsWith('search:');\n\t\t\t\tconst is_pinned = loggingReason.startsWith('pin:');\n\n\t\t\t\tif ((no_search.value && is_search) || (no_pinned.value && is_pinned) || (!is_search && !is_pinned)) {\n\t\t\t\t\t$this.addClass('norecommended-hidden');\n\n\t\t\t\t\tif (!hide_posts_completely.value) {\n\t\t\t\t\t\tlet note_text = loggingReason.startsWith('pin:') ?\n\t\t\t\t\t\t\t`pinned post by ${blogName}` : `recommended post by ${blogName}`;\n\t\t\t\t\t\tXKit.interface.react.collapse($this, note_text, 'norecommended');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\thide_recommended_on_blogs: function() {\n\t\tif (!XKit.interface.is_tumblr_page()) {\n\t\t\t//We're not going to expect other themes have this class as well.\n\t\t\tXKit.tools.add_css(\".related-posts-wrapper, .recommended-posts-wrapper {display:none;}\", \"norecommended\");\n\t\t}\n\t},\n\n\tdestroy: function() {\n\t\tthis.running = false;\n\t\t$('.norecommended-done').removeClass('norecommended-done');\n\t\t$('.norecommended-hidden').removeClass('norecommended-hidden');\n\t\tXKit.interface.react.destroy_collapsed('norecommended');\n\t\tXKit.post_listener.remove('norecommended');\n\t\tXKit.tools.remove_css(\"norecommended\");\n\t}\n\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,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\n","title":"No Recommended","description":"Removes recommended posts","developer":"STUDIOXENIX","version":"2.3.4","details":"This extension removes recommended posts from your dashboard. To remove Recommended Blogs on the sidebar, please use Tweaks extension.","frame":"false","beta":"false","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/notificationblock.json b/Extensions/dist/notificationblock.json
new file mode 100644
index 000000000..e2239be9a
--- /dev/null
+++ b/Extensions/dist/notificationblock.json
@@ -0,0 +1 @@
+{"id":"notificationblock","script":"//* TITLE NotificationBlock **//\n//* VERSION 1.4.2 **//\n//* DESCRIPTION Blocks notifications from a post **//\n//* DEVELOPER new-xkit **//\n//* DETAILS One post got way too popular and now just annoying you? Click on the notification block icon on that post to hide the notifications from that post. If you have Go-To-Dash installed, you can click on a notification, then click View button on top-right corner to quickly go back to the post on your dashboard. **//\n//* FRAME false **//\n//* BETA false **//\n\nXKit.extensions.notificationblock = new Object({\n\n\trunning: false,\n\tbutton_icon: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAAXNSR0IArs4c6QAAAblJREFUOBGdk0soRFEcxi9NKUpWVmxYYoGU51KWhI2NZmNPsZpoNrPRpBHWrCSPslRsp4jFZMpKVhaKkGcJ4/fduWc6d+bOFf/65vv+z3POPWccJ8RisVgaHISU+FIRn4dDcw+USyQSx3BvcT7MLxlG8RH4ArV2I4vs4L+ySNSO2zpoWLVdYOlxdA5ErZhPVvq8352KsJK/DnNnceQ4mC4eHHTM4pogf4HgG0jZyX/tjAE6bo09SDrCdofgAbDITT0pKCPemleubjPaYveiqGsidkhvs465DfQMGkAUGMsaAZ8bTXOSRvci0MPEV4D7jHTMS69wkmS3p8tRnEGzSlL7Au2DRrAMHO1sC3QArbYKylk9g24ZUkfBPTDPJINOqkk7WwfvcrDOPJX+eoPmyDwAM0iFGXLPEpWIO3hDToilvdx8QM0Eu71W3DyNJfRnQKEJ9UmwsD70qQl6XAWfSLvDKNIlrClQzljdLNxl1TyiZ+gfU8wUSOsIVxIBtknDNwP3rJx2OEg8ZWKFYQT1EUfAjUlarA8vG82TcwH303Pm+S4VhskjmYXawS7Qf8+YvcAUdS3gwyQN/wCrsHgfRS7nugAAAABJRU5ErkJggg==\",\n\tbutton_ok: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N0FDNkNDNzYxNkVEMTFFM0E2RkFCMjhCQTdGQjEwOTAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6N0FDNkNDNzcxNkVEMTFFM0E2RkFCMjhCQTdGQjEwOTAiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3QUM2Q0M3NDE2RUQxMUUzQTZGQUIyOEJBN0ZCMTA5MCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3QUM2Q0M3NTE2RUQxMUUzQTZGQUIyOEJBN0ZCMTA5MCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PhNHAxwAAAFhSURBVHjaYsxeqs2ABxwF4s9A7IFLwZSoK3A2CxZ5SyD+D8QngNiKgQSAzbA9QPwXiPnQxFcD8VcgTiDFMC4cakOgLsZpGBMDaYARnySphsFAAxAXEONNYkAdEH8D4gnUcBnIu9zYvOkOxC1YYk8Hia2LK6JylukoAfFdmDdXQQ2SQYupy0jsS0jsHqSI8AfiyTCHgFx2ByoRB8QWRAR8CZT9BYg3ALEsEE+EuWwFEBtBbZuCxyAxIH4NxAJA/A7JdRegrgW7bD4Qf4dKGOMxDGRQKRC/R0tvF4D58zPMsDdAvICA945C6VoscpHACHiCnDT6gPgPHsOsoTQooE+jybED8Ulkw0CRMJWA62BqTZHEPgBxIdCbweiJFuSFezgMWgbE/4B4LZIYyIWuQIMmYMsBoEAMAOIXWAwrhdJBUPoaENsA8Rl82QmUUA2BeA0078EAsgWpQAwqnn+h2wgQYAAh60jncAp2xAAAAABJRU5ErkJggg==\",\n\tblacklisted: [],\n\n\tpreferences: {\n\n\t\task: {\n\t\t\ttext: \"Show the confirmation window\",\n\t\t\tdefault: true,\n\t\t\tvalue: true\n\t\t},\n\n\t},\n\n\trun: async function() {\n\n\t\tthis.running = true;\n\n\t\tif (XKit.interface.where().inbox === true) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait XKit.css_map.getCssMap();\n\t\tXKit.tools.init_css(\"notificationblock\");\n\n\t\tvar storage = XKit.storage.get_all(\"notificationblock\");\n\t\tif (storage && storage.posts) {\n\t\t\tthis.blacklisted = storage.posts.value.split(\",\").filter(i => i);\n\t\t}\n\n\t\tXKit.interface.react.create_control_button(\"xnotificationblockbutton\",\n\t\t\tthis.button_icon, \"NotificationBlock\",\n\t\t\tthis.on_click.bind(this), this.button_ok\n\t\t);\n\n\t\tXKit.post_listener.add(\"notificationblock\", this.do.bind(this));\n\t\tthis.do();\n\n\t\tif (XKit.interface.where().activity === true) {\n\t\t\tconsole.log(\"In activity, repeat block mode\");\n\t\t\tsetInterval(this.do.bind(this), 1000);\n\t\t}\n\n\t},\n\n\trecheck_all: function() {\n\t\tconst notificationClasses = [\n\t\t\t\"notification\",\n\t\t\t...XKit.css_map.keyToClasses('notification'),\n\t\t];\n\n\t\t$(notificationClasses.map(cls => `.${cls}.xnotificationblockchecked`).join(\", \")).\n\t\t\tremoveClass(\"xnotificationblockchecked\").removeAttr('data-xkit-notificationblock-blocked');\n\n\t\tthis.do();\n\t},\n\n\tunblock: function(post_id) {\n\t\tvar m_index = this.blacklisted.indexOf(post_id);\n\t\tif (m_index !== -1) {\n\t\t\tthis.blacklisted.splice(m_index, 1);\n\t\t\tXKit.storage.set(\"notificationblock\", \"posts\", this.blacklisted.join(\",\"));\n\t\t}\n\n\t\tthis.recheck_all();\n\t},\n\n\tblock: function(post_id) {\n\t\tif (this.blacklisted.indexOf(post_id) === -1) {\n\t\t\tthis.blacklisted.push(post_id);\n\t\t\tXKit.storage.set(\"notificationblock\", \"posts\", this.blacklisted.join(\",\"));\n\t\t}\n\n\t\tthis.recheck_all();\n\n\t},\n\n\ton_click: function(e) {\n\t\tconst self = this;\n\t\tconst $block_button = $(e.target || e.srcElement);\n\t\tconst post_id = $block_button.attr('data-post-id');\n\n\t\tif (this.preferences.ask.value === false) {\n\t\t\tif ($block_button.hasClass(\"xkit-interface-completed\")) {\n\t\t\t\tthis.unblock(post_id);\n\t\t\t\tXKit.interface.completed_control_button($block_button, false);\n\t\t\t} else {\n\t\t\t\tthis.block(post_id);\n\t\t\t\tXKit.interface.completed_control_button($block_button, true);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tif ($block_button.hasClass(\"xkit-interface-completed\")) {\n\t\t\tXKit.window.show(\"Unblock notifications from this post?\",\n\t\t\t\t\"Notifications from this post will be shown. You may have to refresh the page for changes to take effect\",\n\t\t\t\t\"question\",\n\t\t\t\t'
Unblock Notifications
Cancel
');\n\n\t\t\t$(\"#xkit-notification-block-ok\").click(function() {\n\t\t\t\tself.unblock(post_id);\n\t\t\t\tXKit.window.close();\n\t\t\t\tXKit.interface.completed_control_button($block_button, false);\n\t\t\t});\n\n\t\t} else {\n\t\t\tXKit.window.show(\"Block notifications from this post?\",\n\t\t\t\t\"Notifications originating from this post will be blocked on the dashboard and activity page, without any indication that they were blocked.\",\n\t\t\t\t\"question\",\n\t\t\t\t'
Block Notifications
Cancel
');\n\n\t\t\t$(\"#xkit-notification-block-ok\").click(function() {\n\t\t\t\tself.block(post_id);\n\t\t\t\tXKit.window.close();\n\t\t\t\tXKit.interface.completed_control_button($block_button, true);\n\t\t\t});\n\t\t}\n\t},\n\n\tpopulate_notification_props: function() {\n\t\treturn XKit.tools.async_add_function(async () => {\n\t\t\t/* globals tumblr */\n\n\t\t\tconst keyStartsWith = (obj, prefix) =>\n\t\t\t\tObject.keys(obj).find(key => key.startsWith(prefix));\n\n\t\t\tconst cssMap = await tumblr.getCssMap();\n\t\t\tconst elements = document.querySelectorAll(\n\t\t\t\tcssMap.notification.map(cls => `.${cls}:not([data-target-id])`).join(',')\n\t\t\t);\n\n\t\t\telements.forEach(element => {\n\t\t\t\tlet fiber = element[keyStartsWith(element, '__reactFiber')];\n\t\t\t\tconst notificationProp = () => fiber.memoizedProps && fiber.memoizedProps.notification;\n\n\t\t\t\twhile (fiber && !notificationProp()) {\n\t\t\t\t\tfiber = fiber.return;\n\t\t\t\t}\n\n\t\t\t\tif (fiber) {\n\t\t\t\t\tconst {targetPostId} = notificationProp();\n\t\t\t\t\telement.dataset.targetId = targetPostId;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t},\n\n\tdo: async function() {\n\t\tconst self = this;\n\n\t\tif (self.blacklisted.some(i => i)) {\n\t\t\tconst blacklisted_post_regexp = new RegExp(`\\\\b(${self.blacklisted.join('|')})\\\\b`);\n\n\t\t\tawait self.populate_notification_props();\n\n\t\t\t$(`.notification, ${XKit.css_map.keyToCss('notification')}`).\n\t\t\t\tnot(\".xnotificationblockchecked\").\n\t\t\t\teach(function() {\n\t\t\t\t\tconst $note = $(this);\n\n\t\t\t\t\t$note.addClass(\"xnotificationblockchecked\");\n\n\t\t\t\t\tlet target_url = $note.children('a').attr('href') || $note.find(\".notification_target\").attr('href');\n\n\t\t\t\t\tif ($note.attr('data-target-id')) {\n\t\t\t\t\t\ttarget_url = target_url + \" \" + $note.attr('data-target-id');\n\t\t\t\t\t}\n\n\t\t\t\t\tif ($note.attr('data-url-original')) {\n\t\t\t\t\t\ttarget_url = target_url + \" \" +\t$note.attr('data-url-original');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (blacklisted_post_regexp.test(target_url)) {\n\t\t\t\t\t\tconsole.log(`Blocking ${target_url} with regex ${blacklisted_post_regexp}`);\n\t\t\t\t\t\tthis.dataset.xkitNotificationblockBlocked = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}\n\n\t\t$(\".xkit-old-notifications, .notification\").first().addClass(\"first_notification\");\n\t\t$(\".xkit-old-notifications, .notification\").first().each(function() {\n\t\t\tif ($(this).is(\":last\")) {\n\t\t\t\t$(this).removeClass(\"first_notification\").addClass(\"single_notification\");\n\t\t\t}\n\t\t});\n\n\t\tif ($(\"[data-id]\").length > 0) {\n\t\t\tconst posts = await XKit.interface.react.get_posts(\"xnotificationblockchecked\", !!'can_edit');\n\t\t\t$(posts).each(async function() {\n\t\t\t\t$(this).addClass(\"xnotificationblockchecked\");\n\t\t\t\tvar post_id = this.dataset.id;\n\n\t\t\t\tawait XKit.interface.react.add_control_button($(this), \"xnotificationblockbutton\");\n\n\t\t\t\tif (XKit.extensions.notificationblock.blacklisted.indexOf(post_id) !== -1) {\n\t\t\t\t\tXKit.interface.completed_control_button(\n\t\t\t\t\t\t$(this).find(\".xnotificationblockbutton div\"), true\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t},\n\n\tdestroy: function() {\n\t\tthis.running = false;\n\t\tXKit.post_listener.remove(\"notificationblock\");\n\t\t$(\".xnotificationblockbutton\").remove();\n\t\t$(\".xnotificationblockchecked\").removeClass(\"xnotificationblockchecked\");\n\t\t$(\".xkit-notification-notification-block-button\").remove();\n\t\tXKit.tools.remove_css(\"notificationblock_notfix\");\n\t}\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpGNzdGMTE3NDA3MjA2ODExODA4MzkyMjM2MzU5MTQ4NCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1NTY1ODZDODM4QzQxMUUzQTFDQUFDOThEMTlDRUY3OSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1NTY1ODZDNzM4QzQxMUUzQTFDQUFDOThEMTlDRUY3OSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZCN0YxMTc0MDcyMDY4MTE4MDgzOTIyMzYzNTkxNDg0IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkY3N0YxMTc0MDcyMDY4MTE4MDgzOTIyMzYzNTkxNDg0Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+lGIJ0gAAAmpJREFUeNpi/Kpkw0BLwMRAYzBqAUHAwsDIRGsLGIlUyr5s2v8v336llVDZB0yaOgwM//9dv8psqgXk/iLRx4R9wLGim+Hv32/GvlA+IyNbb8P/bz9+13YQaQEzASWc7GBzYcoYmVl8bBn+//9d103VSIYrgzCA/iZOIwsDE3EWwJUhMVjTYv99+vJ3xXp8FjASZwFcGTKDNS+C4fvP76s24vUBMzNRPoArQ2YAA4qLA78JTCAvYyAmcxOWzDgGbl54gDAqKkIZSkrIYfXdIgLIYJSSYt88C6tR2COZvbeEgYeTUULkd9MkaGJdPwHKWNcP9Xte0nfjYJBFtpaslUlM3FxYjQIGERbRf49eMGkpsvjZ/Vm3C6vHf89Y82feSqBezoNLIOn498y1WI0CWsCCKfp39wmgBaA8VZ6CKfvdPZ3h0ycGPj7O3XMg+fTfzYd/Vm7FahQwmJgx0Z8dhxh+/gJJaylicf+XryxR/px75sJLgX+3H4HUYzOKiYGFGQv69u3P1qNYA+ffpdtABazJASjh4GbJvmEyVqOwpyIg+rNmB8Pff1i8rKcKlP3unfnv+n2EKBvLv2v3caQiHKn4/6u3v9fvZw1xxiLHysLw7z+TJiz0vnz7vXDLn/W7sBqFL6P9WbKJ2VqfSVIERXDfaWByZG3IhIbYjQe/Ji//f+cBLnOYGFmYcaLfv383zfz/7hNKApu3DijFYmMAMv3h81/lfQwPHuMxhAUUFbjB/2cvfhZ0saaHMptoMrCzgUQ+f4Vo+T15xd894ISA1wTG7wH5NK6TWZiHugXMNPcBy1D3ASttfQAQYADCE7PREUA/jAAAAABJRU5ErkJggg==","css":".xkit-notification-notification-block-button {\n\tposition: absolute;\n\tright: 35px; top: 7px;\n\tbackground: rgba(255,255,255,.38) !important;\n\tdisplay: none;\n\tcolor: #3d546b !important;\n\tfont-weight: bold;\n\tfont-size: 9px !important;\n\tpadding: 0px 2px; border-radius: 2px;\n\ttext-decoration: none;\n\ttext-transform: uppercase !important;\n\tline-height: 12px !important; height: 12px !important;\n}\n\n[data-xkit-notificationblock-blocked] {\n\tdisplay: none;\n}\n\n.notification:hover .xkit-notification-notification-block-button {\n\tdisplay: block;\n}\n\n.xkit-notification-notification-block-button:hover {\n\tbackground-color: rgba(255,255,255,.75) !important;\n}\n","title":"NotificationBlock","description":"Blocks notifications from a post","developer":"new-xkit","version":"1.4.2","details":"One post got way too popular and now just annoying you? Click on the notification block icon on that post to hide the notifications from that post. If you have Go-To-Dash installed, you can click on a notification, then click View button on top-right corner to quickly go back to the post on your dashboard.","frame":"false","beta":"false","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/notifications_plus.json b/Extensions/dist/notifications_plus.json
new file mode 100644
index 000000000..ae6b388a1
--- /dev/null
+++ b/Extensions/dist/notifications_plus.json
@@ -0,0 +1 @@
+{"id":"notifications_plus","script":"//* TITLE Notifications+ **//\n//* VERSION 1.5.7 **//\n//* DESCRIPTION Enhances the notifications **//\n//* DEVELOPER STUDIOXENIX **//\n//* FRAME false **//\n//* BETA false **//\n//* DETAILS This extension replaces both XPreview and Only Replies extensions of XKit 6. Using this, you can hover over notifications to get post notes, and toggle the option that dims non-reply notifications. **//\n//* SLOW true **//\n\nXKit.extensions.notifications_plus = new Object({\n\n\trunning: false,\n\tslow: true,\n\tapiKey: XKit.api_key,\n\n\tlast_post_id: \"\",\n\tlast_post_notes: 0,\n\tcurrent_post_id: \"\",\n\n\tpreferences: {\n\t\t\"sep_0\": {\n\t\t\ttext: \"FollowDot\",\n\t\t\ttype: \"separator\",\n\t\t},\n\t\t\"follow_glow\": {\n\t\t\ttext: \"Highlight the dashboard notifications from people I follow\",\n\t\t\tdefault: true,\n\t\t\tvalue: true\n\t\t},\n\t\t\"sep_1\": {\n\t\t\ttext: \"XPreview\",\n\t\t\ttype: \"separator\",\n\t\t},\n\t\t\"show_notes\": {\n\t\t\ttext: \"Show notes when I hover on a notification\",\n\t\t\tdefault: true,\n\t\t\tvalue: true\n\t\t},\n\t\t\"show_bigger_preview\": {\n\t\t\ttext: \"Show bigger preview when I hover on a notification\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t},\n\t\t\"sep_4\": {\n\t\t\ttext: \"Dim Notifications\",\n\t\t\ttype: \"separator\",\n\t\t},\n\t\t\"only_replies\": {\n\t\t\ttext: \"Dim non-reply notifications\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t},\n\t\t\"dont_dim_on_reblogs\": {\n\t\t\ttext: \"Don't dim notifications on reblogs with new text\",\n\t\t\tdefault: false,\n\t\t\tvalue: false,\n\t\t\tslow: true\n\t\t},\n\t},\n\n\trun: function() {\n\t\tthis.running = true;\n\n\t\tif (XKit.extensions.notifications_plus.preferences.only_replies.value === true) {\n\t\t\tXKit.tools.add_css(\"ol#posts .notification { opacity: 0.29; } ol#posts .notification_answer, ol#posts .notification_reply, ol#posts .notification_photo_reply ol#posts .notification:hover { opacity: 1; } \", \"notifications_plus_only_replies\");\n\t\t}\n\n\t\tif (XKit.extensions.notifications_plus.preferences.dont_dim_on_reblogs.value === true) {\n\t\t\tXKit.post_listener.add(\"notifications_plus\", XKit.extensions.notifications_plus.dedim);\n\t\t\tXKit.extensions.notifications_plus.dedim();\n\t\t}\n\n\t\tif (XKit.interface.where().dashboard === true || XKit.interface.where().channel === true) {\n\n\t\t\tif (XKit.extensions.notifications_plus.preferences.follow_glow.value === true) {\n\t\t\t\tXKit.post_listener.add(\"notifications_plus\", XKit.extensions.notifications_plus.follow_glow);\n\t\t\t\tXKit.extensions.notifications_plus.follow_glow();\n\t\t\t}\n\n\t\t}\n\n\t\tif (XKit.extensions.notifications_plus.preferences.show_notes.value === true) {\n\t\t\tXKit.tools.init_css(\"notifications_plus\");\n\t\t\tXKit.extensions.notifications_plus.xpreview_init();\n\t\t}\n\t},\n\n\tfollow_glow: function() {\n\n\t\t$(\".notification\").not(\".notifications-follow-glow-plus-done\").each(function() {\n\n\t\t\t$(this).addClass(\"notifications-follow-glow-plus-done\");\n\n\t\t\tvar check_div = $(this).find(\".control.avatar_frame\");\n\n\t\t\tif (typeof $(check_div).attr('data-tumblelog-popover') !== \"undefined\") {\n\n\t\t\t\tvar u_obj = JSON.parse($(check_div).attr('data-tumblelog-popover'));\n\n\t\t\t\tif (u_obj.following === true) {\n\n\t\t\t\t\t$(this).addClass(\"xkit-notifications-plus-follow-glow\");\n\t\t\t\t\t$(this).append(\"
\");\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// Probably old notifications.\n\n\t\t\t\tif ($(this).hasClass(\"xkit_notification_follower_is_friend\")) {\n\n\t\t\t\t\t$(this).addClass(\"xkit-notifications-plus-follow-glow\");\n\t\t\t\t\t$(this).append(\"
Can't fetch blog information. Please try again later.
\");\n\t\t$(\"#xkit-profiler-contents\").nanoScroller();\n\t\t$(\"#xkit-profiler-contents\").nanoScroller({ scroll: 'top' });\n\n\t},\n\n\tshow_ump_error: function() {\n\n\t\tif (XKit.storage.get(\"profiler\", \"shown_warning_about_show_more\", \"\") !== \"yass\") {\n\t\t\tXKit.window.show(\"Oops: User Menus+ is missing.\", \"Profiler requires User Menus+ extension to be installed and enabled in order to work. Please download User Menus+ from the extension gallery and refresh the page to start using Profiler.\", \"error\", \"
OK
\");\n\t\t\tXKit.storage.set(\"profiler\", \"shown_warning_about_show_more\", \"yass\");\n\t\t}\n\n\t},\n\n\tdestroy: function() {\n\t\tthis.running = false;\n\t\ttry {\n\t\t\tXKit.extensions.show_more.remove_custom_menu(\"profiler\");\n\t\t} catch (e) {\n\t\t\tconsole.error(\"Can't remove custom menu, \" + e.message);\n\t\t}\n\t}\n\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NkQzMUIxMzgxQjM2MTFFM0EzRUJBOUI0RDFFQjc1RUQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NkQzMUIxMzkxQjM2MTFFM0EzRUJBOUI0RDFFQjc1RUQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo5Mzk1NzY3RjFCMjYxMUUzQTNFQkE5QjREMUVCNzVFRCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo5Mzk1NzY4MDFCMjYxMUUzQTNFQkE5QjREMUVCNzVFRCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsYvGsQAAAQ/SURBVHjafJYpTzRBEIZ3huG+b8KNQACOIJA4BAYwKCS/AIFEIEkw/ACCwKBIgASDQGBIcByKIyEQ7jvcx/fsvkvRzOx+JXp6qquqq6rfqu5ga2vL8zzf9xljsZiXoK+vL/1C3wmCo18mn5+fjGLqF5KYlt7f343py7qUvR+Cw5ptySiOK2OK9vv9Q+ZZXNH7S7aTKbujqy8TYtrcLJhW4BpNqamls7Oz09NTouaXsaqqqrKyMuSWSNmWLukKLEbLiRvg+fn5/Pz8+vo6EzsnZb+ioqK7u7uvr6+srMyC0JLrtLezs5ORkeFuoPnT09PMzMzCwkJWVlZOTg5jEATKGyY+Pj7e3t5eXl4Ye3t7BwcHc3Nz7cw/EqS5t7u7a6dq2+7t7U1OTh4fHxcWFpaUlDBmZ2fLD3mK5uvr68PDw+3tLSMZGxkZqa+v1xLExprHIzBIKLr9/f2xsTEmZJnwCwoKcB/rsb8kK4+Pj9fX1xcXF/yOjo5qD9wHqZr4lnFZR2FqaoqcNDU1IV1eXk7sUesQTJYQQAzhvLy82dlZEpt03POEiEAno7wTxNzc3N3dXUNDQ2lpKY6HEEKusXhycrK8vGyYwTTHk5mZeXR0tLS0NDAwoHNKCmimDQDi6upqTU0N1kl6yDrxwmck44wu3hFmCcWNjQ0yZhWHcV8flfXi4qLyju/RnDw/P3PsTIAA89AqKiiivra2pkYifhDf5KdVbG9vI0RmQ76LOLfx8fGrqyustLa2hlZRQRH1g4ODb4cCO5PLy0sCBzO2n0v9/f3gVeECs5WVlagMiqhfJ0jCcaa1RqAG3lMmh42Li4utjhobGznSWCpCHSMUh9W2b2r8q5rSZV8VJHnSlXID1IUOq7jfDWCltK7sT0xMDA0NWSegxGJpCCP39/d2YQTy3b0AokRCSBFGzRW3aUdPoqioyNAfWNXBTacDPCg9yhvf/29dxFErMXEUWcmxAQspFShUjo7uZoH/xzp+YEeBJlNkuMRN2kBKtZ6eHjywCIaHhykI6jYqSZ3b3RBH0adD7e3tOpIoTLFugJZrIN1tGNZim5ubFeLvBu8JQjo/P5/llDAlMm0gFDE5PDyMNgzaETBFQMLJVqHjhsvY1tZ2c3ND0w7BdHp6mkr87ZG+X11dHWoYwkLoVZCEqV3TTDo6OjY3N93wBVP3eAE7HLee4bS0tMAJvaOCKCTQ7OrqovFxF7qu4bJ7rdIV4OtXuWV0+2gyAvdfbzo43CGdnZ00Ne4Qg2k6XJL3uro6IjBTf9q1mwq3mJkQcm1tLV2IRssDImSXw6Q5E5YSZQVoSFPaAw7QHjz2HLI7D9+5bwn/JUEmg3VSFEq3dVCDbHwDsxV67bp9CQHM4alhwSrOtW6ZsTqIu+hWlvsOdN+wblhqXJYHc9aeEa5u8lXhempPKyHPfbWro1gFGb71m65B/RNgAE6EQ+bxcXjIAAAAAElFTkSuQmCC","css":"#xkit-profiler-contents {\n\tbackground: rgb(245,245,245);\n\tborder: 1px solid rgb(190,190,190);\n\theight: 200px;\n}\n\n.xkit-profiler-nickname-inline {\n\tfont-weight: normal;\n\tdisplay: inline-block;\n\tmargin-left: 5px;\n\tcolor: rgb(100,100,100);\n}\n\n#xkit-profiler-contents.error-box {\n\ttext-align: center;\n\tcolor: rgb(130,130,130);\n\tline-height: 30px;\n}\n\n.xkit-profiler-nickname {\n\tfont-weight: normal;\n\tmargin-left: 5px;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\tmax-width: 55px;\n}\n\n.xkit-profiler-line {\n\tborder-bottom: 1px solid rgb(190,190,190);\n\tpadding: 0px 10px;\n\theight: 25px;\n\tline-height: 25px;\n\tposition: relative;\n}\n\n.xkit-profiler-line:last-child {\n\tborder-bottom: 0;\n}\n\n.xkit-profiler-line.separator {\n\tbackground: rgb(190,190,190);\n\tfont-weight: bold;\n}\n\n.xkit-profiler-line div.loading-up {\n\tbackground: transparent no-repeat 50% 50% url(data:image/gif;base64,R0lGODlhDgAEALMKAOvt7////97i5L3Ey+Xn6vb3+PDy89PY26ixueLl5wAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzU0REE2MUM4NjVBMTFFMkE4N0FGRkVDQThGN0FCRDAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzU0REE2MUQ4NjVBMTFFMkE4N0FGRkVDQThGN0FCRDAiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozRTRCNEE3NTg2NTUxMUUyQTg3QUZGRUNBOEY3QUJEMCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDozRTRCNEE3Njg2NTUxMUUyQTg3QUZGRUNBOEY3QUJEMCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAURAAoALAAAAAAOAAQAAAQfMI2RghHChAJAGQgyBMJxCAFAEAAokiaqshJlYRrnRQAh+QQFEQAKACwAAAAACQAEAAAEFdAIYVQaI4lzhBoIMmzdFw4SZWFJBAAh+QQFEQAKACwAAAAADgAEAAAEH7AAUJQRwqg0RgIEASjCcQjKgCADKJImqrISZWEa50UAIfkEBREACgAsBQAAAAkABAAABBWwAFCUEcIAQoASxyFs3RcKEmVhRgQAOw==);\n}\n\n.xkit-profiler-line div {\n\ttext-align: right;\n\tposition: absolute;\n\ttop: 0; right: 20px;\n\theight: 25px;\n\tline-height: 25px;\n\tmin-width: 15px;\n\tmax-width: 240px;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}","title":"Profiler","description":"The User Inspection Gadget","developer":"STUDIOXENIX","version":"1.2.6","details":"Select Profiler option from the User Menu to see information such as when they started blogging, how many posts they have, timezone, and more.
Requires User Menus+ to be installed.","frame":"false","beta":"false","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/quick_tags.json b/Extensions/dist/quick_tags.json
new file mode 100644
index 000000000..64d23c085
--- /dev/null
+++ b/Extensions/dist/quick_tags.json
@@ -0,0 +1 @@
+{"id":"quick_tags","script":"//* TITLE Quick Tags **//\n//* VERSION 0.6.9 **//\n//* DESCRIPTION Quickly add tags to posts **//\n//* DETAILS Allows you to create tag bundles and add tags to posts without leaving the dashboard. **//\n//* DEVELOPER New-XKit **//\n//* FRAME false **//\n//* BETA false **//\n\nXKit.extensions.quick_tags = new Object({\n\n\trunning: false,\n\n\tbutton_icon:\" data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAaRJREFUOBGlk7FKw1AUhnMjQSpZpIsP4KCLHUQ3h+oLuDkLxSWlSd7AooNbSkmLeQAfw3ZxKDpVEH0EF52EUqKp/x+SEq7NTYIXLufmnNPvnv/cUzEcDjfn8/mNEKKhaZqOnV0/+JiYpnnVarU+s4G8s/A8L0DwIi+Bflz2ZhhG07Ksd1UeY3pSGc/nOB9mt67rR/BPF4vFThiG48FgsMVE1aLEWCZALzifYo9oHcd5sm37AZWd4Ls0VO5ZB9WYAHSw49Vutz+qQGVgH5V+gdRPeJWhotfrPaKqA/aOMrMg+ez7fh29vIe/gfyVD8UKv/lDJKzTqlYZ+QROCImiCAX4dRWQsSKojqG9RnWvyG1Qzn+hgrdyvgAboZe7+JzyVVkJY6ol97RWq+3Hr8x/ACDHbDQAlSrF8N/yUg7/bDbbXo5NAm1WgWJCzgDyExVdTMlzLDlxxCaRP+aNcOTKJwzxO+StwXZd172E1f4A6SyC5sFygSqoCqYEroLyAdgzWSZz07VSchqkleSnoWXPUkdqC4FMlKC5sBRaygZBsIH+7RUl/wJcdCuw4Tjk5QAAAABJRU5ErkJggg==\",\n\tbutton_ok_icon: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAcBJREFUOBGlk79KA0EQxmc2F2JCFEQLH8BCMZoiJJ2F+gJiESVWNjYJWgmWES0EC0mIoA9wChY21sZGMCRVJEEfwUYtDInC5dadIyuXNXeXw4Vj/83+br5vZ3Ffnx9vgXnMEeLAkYGtIUAXESuaFj08TT++27Ych5jT5y44wLZjhNgQ0JewFl46Sdde3eJoj1mZ0YCxLS0Aqb4PtUUBq3POZzpG537vOjnlCZQyGZpNg+OqYUKZ+sJGs1bI1B/4SGTFD7TPM+B8BzhErb6Xytla9c0PtB+IWASEljCtaJfmB4pZPVYF4EnyjmTaQeo4e5OawK/2nfA07nRRDBEM66CphVSAOh8mUyb8qtDBLnRLlIEKUedeUBYMjh0Jz54tGULOf6HiMQBQfbWNTllkO2uViCgVykTNTp2rnk6OhhLWLdMLiGjhZTLab6aiKs7pR1T8H5/f079lQ1B6Xn6guavYOudQIiACHhQyjSdLMi3IRvLpmdEf3eT3YLpILUCw0mYjT4w/QFr0gjrBHIFuUDeYK3AQlC7A8kyRSbGyDZQsN6m3y5frds/kmuw9gRRoh7rBJHSoPn+biOxexha8gn8AF6tJ8Q8uzcUAAAAASUVORK5CYII=\",\n\tpreferences: {\n\t\t\"sep0\": {\n\t\t\ttext: \"Options\",\n\t\t\ttype: \"separator\"\n\t\t},\n\t\t\"append_not_replace\": {\n\t\t\ttext: \"Append, do not replace tags when adding them\",\n\t\t\tvalue: true,\n\t\t\tdefault: true\n\t\t},\n\t\t\"show_in_new_post\": {\n\t\t\ttext: \"Enable Quick Tags in new post popup\",\n\t\t\tvalue: true,\n\t\t\tdefault: true\n\t\t},\n\t\t\"show_in_one_click_postage\": {\n\t\t\ttext: \"Enable Quick Tags in One-Click Postage popup\",\n\t\t\tvalue: true,\n\t\t\tdefault: true\n\t\t},\n\t\t\"append_not_replace_one_click\": {\n\t\t\ttext: \"Also append and do not replace tags when adding them using One-Click Postage\",\n\t\t\tvalue: false,\n\t\t\tdefault: false\n\t\t},\n\t\t\"hide_new_bundle_button\": {\n\t\t\ttext: \"Hide the new bundle button at the end of One-Click Postage\",\n\t\t\tvalue: false,\n\t\t\tdefault: false\n\t\t},\n\t\t\"sep1\": {\n\t\t\ttext: \"My Tag Bundles\",\n\t\t\ttype: \"separator\"\n\t\t}\n\t},\n\n\ttag_array: [],\n\n\tprocessing: false,\n\n\tcancel_menu_close: function() {\n\t\tclearTimeout(XKit.extensions.quick_tags.menu_closer_int);\n\t\tXKit.extensions.quick_tags.user_on_box = true;\n\t},\n\n\tmenu_close: function() {\n\t\t// Only close the menu if it doesn't have keyboard or mouse focus\n\t\tif ($(\"#xkit-quick-tags-window\").find('input:focus').length === 0 &&\n\t\t\t\t$('#xkit-quick-tags-window:hover').length === 0) {\n\t\t\tXKit.extensions.quick_tags.user_on_box = false;\n\t\t\tXKit.extensions.quick_tags.menu_closer_int = setTimeout(function() { XKit.extensions.quick_tags.close_window(); }, 500);\n\t\t}\n\t},\n\n\trun: function() {\n\t\tthis.running = true;\n\n\t\tXKit.tools.init_css(\"quick_tags\");\n\n\t\tXKit.interface.post_window.create_control_button(\"xkit-quick-tags-window\", this.button_icon, \"Quick Tags in a window!\");\n\n\t\t$(document).on(\"mouseover\", \"#xkit-quick-tags-window\", XKit.extensions.quick_tags.cancel_menu_close);\n\t\t$(document).on(\"mouseout\", \"#xkit-quick-tags-window\", XKit.extensions.quick_tags.menu_close);\n\n\t\t$(document).on('mouseover', '.xkit-quick-tags, .xkit-quick-tags-window', XKit.extensions.quick_tags.move_window);\n\t\t$(document).on('mouseout', '.xkit-quick-tags, .xkit-quick-tags-window', XKit.extensions.quick_tags.menu_close);\n\n\t\t$(document).on('click', '.xkit-tag', XKit.extensions.quick_tags.button_clicked);\n\t\t$(document).on('click', '.xkit-tag-add', XKit.extensions.quick_tags.add_button_clicked);\n\n\t\tXKit.interface.post_window_listener.add(\"quick_tags\", XKit.extensions.quick_tags.post_window);\n\n\t\tif (XKit.page.react) {\n\t\t\tXKit.interface.react.create_control_button(\"xkit-quick-tags\", this.button_icon, \"Quick Tags!\", \"\", this.button_ok_icon).then(() => {\n\t\t\t\tXKit.post_listener.add(\"quick_tags\", XKit.extensions.quick_tags.do_posts);\n\n\t\t\t\tthis.do_posts();\n\t\t\t});\n\t\t}\n\t},\n\n\tpost_window: function() {\n\t\tif (XKit.extensions.quick_tags.preferences.show_in_new_post.value) {\n\t\t\tXKit.interface.post_window.add_control_button(\"xkit-quick-tags-window\", \"data-in-window=\\\"true\\\"\");\n\t\t}\n\t},\n\n\tsubmit: async function(tags, button) {\n\n\t\t// Are we in post window?\n\t\tif ($(button).attr('data-in-window') === \"true\") {\n\t\t\tif (XKit.extensions.quick_tags.preferences.append_not_replace.value !== true) {\n\t\t\t\tXKit.interface.post_window.remove_all_tags();\n\t\t\t}\n\t\t\tXKit.interface.post_window.add_tag(tags.split(\",\"));\n\t\t\tXKit.interface.switch_control_button($(button), false);\n\t\t\treturn;\n\t\t}\n\n\t\t// Find the post object.\n\t\tvar m_post = await XKit.interface.react.find_post($(button).attr('data-post-id'));\n\n\t\tvar m_button = $(button);\n\n\t\t// Fetch info about it!\n\t\tif (!m_post.error) {\n\t\t\tXKit.interface.fetch(m_post, function(data) {\n\n\t\t\t\t// Use Interface to edit the post's tags:\n\t\t\t\tvar m_tags = data.data.post.tags;\n\n\t\t\t\tif (m_tags === \"undefined\" || typeof m_tags === \"undefined\" || m_tags == \"null\") {\n\t\t\t\t\tm_tags = \"\";\n\t\t\t\t}\n\n\t\t\t\tif (XKit.extensions.quick_tags.preferences.append_not_replace.value === true) {\n\t\t\t\t\tm_tags = m_tags + \",\" + tags;\n\t\t\t\t} else {\n\t\t\t\t\tm_tags = tags;\n\t\t\t\t}\n\n\t\t\t\tif (m_tags.indexOf(\",\") != -1) {\n\n\t\t\t\t\tvar split_tags = m_tags.split(\",\");\n\t\t\t\t\tvar new_data = \"\";\n\n\t\t\t\t\tfor (var i = 0; i < split_tags.length; i++) {\n\n\t\t\t\t\t\tif (split_tags[i]) {\n\t\t\t\t\t\t\tif (new_data === \"\") {\n\t\t\t\t\t\t\t\tnew_data = split_tags[i];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tnew_data = new_data + \",\" + split_tags[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tm_tags = new_data;\n\n\t\t\t\t}\n\n\t\t\t\tvar m_post_object = XKit.interface.edit_post_object(data.data, { tags: m_tags });\n\n\t\t\t\t// Now submit it back to the server:\n\t\t\t\tXKit.interface.edit(m_post_object, async function(edit_data) {\n\n\t\t\t\t\tXKit.interface.switch_control_button($(m_button), false);\n\n\t\t\t\t\tif (edit_data.error === false && edit_data.data.errors === false) {\n\n\t\t\t\t\t\tXKit.interface.switch_control_button($(m_button), false);\n\t\t\t\t\t\tawait XKit.interface.react.update_view.tags(m_post, m_tags);\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Oops?\n\t\t\t\t\t\tif (edit_data.error === true) {\n\t\t\t\t\t\t\tXKit.window.show(\"Unable to edit post\", \"Something went wrong, my apologizes. Please try again later or file a bug report with the error code: QT01B\" + edit_data.status + \" \" + edit_data.message, \"error\", \"
OK
\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tXKit.window.show(\"Unable to edit post\", \"Something went wrong, my apologizes. Please try again later or file a bug report with the error code: QT01A\" + edit_data.status + \" \" + edit_data.data.errors, \"error\", \"
OK
\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t});\n\n\t\t\t}, false);\n\t\t} else {\n\t\t\tXKit.window.show(\"Unable to edit post\", \"Something went wrong, my apologies. Please try again later or file a bug report with the error code: QT02\", \"error\", \"
\" + m_title;\n\n\t\t\t\tif (showNumbers && tag < 9) {\n\t\t\t\t\t// force javascript to treat tag as a number instead of string concatenation\n\t\t\t\t\tvar shortcutNumber = parseInt(tag) + 1;\n\t\t\t\t\tm_user_tags = m_user_tags + \"\" + shortcutNumber + \"\";\n\t\t\t\t}\n\n\t\t\t\tm_user_tags = m_user_tags + \"
\");\n\n\t\t\t$(\"#xkit-quick-tags-delete-bundle\").click(function() {\n\n\t\t\t\tXKit.extensions.quick_tags.tag_array.splice(m_id, 1);\n\n\t\t\t\tXKit.storage.set(\"quick_tags\", \"user_tags\", JSON.stringify(XKit.extensions.quick_tags.tag_array));\n\n\t\t\t\tXKit.window.close();\n\t\t\t\tXKit.extensions.quick_tags.cpanel(m_div);\n\t\t\t\tXKit.extensions.xkit_preferences.restart_extension(\"quick_tags\");\n\n\t\t\t});\n\n\t\t\t$(\"#xkit-quick-tags-create-bundle\").click(function() {\n\n\t\t\t\tvar $title = $(\"#xkit-quick-tags-add-title\");\n\t\t\t\tvar title = $title.val();\n\t\t\t\tvar $tags = $(\"#xkit-quick-tags-add-tags\");\n\t\t\t\tvar tags = $tags.val();\n\t\t\t\tvar quit = false;\n\n\t\t\t\tif ($.trim(title) === \"\") {\n\t\t\t\t\t$title\n\t\t\t\t\t\t.css(\"border-color\", \"red\")\n\t\t\t\t\t\t.attr(\"placeholder\", \"Please enter a name for your bundle.\")\n\t\t\t\t\t\t.click(function() {\n\t\t\t\t\t\t\t$title\n\t\t\t\t\t\t\t\t.removeAttr(\"style\")\n\t\t\t\t\t\t\t\t.attr(\"placeholder\", \"eg: Doctor Who\")\n\t\t\t\t\t\t\t\t.off(\"click\");\n\t\t\t\t\t\t});\n\t\t\t\t\tquit = true;\n\t\t\t\t}\n\n\t\t\t\tif ($.trim(tags) === \"\") {\n\t\t\t\t\t$tags\n\t\t\t\t\t\t.css(\"border-color\", \"red\")\n\t\t\t\t\t\t.attr(\"placeholder\", \"Please enter the tags for your bundle.\")\n\t\t\t\t\t\t.click(function() {\n\t\t\t\t\t\t\t$tags\n\t\t\t\t\t\t\t\t.removeAttr(\"style\")\n\t\t\t\t\t\t\t\t.attr(\"placeholder\", \"eg: Doctor Who, Dr. Who, Non-Medical Tv Show Doctor\")\n\t\t\t\t\t\t\t\t.off(\"click\");\n\t\t\t\t\t\t});\n\t\t\t\t\tquit = true;\n\t\t\t\t}\n\n\t\t\t\tif (quit) { return; }\n\n\t\t\t\tXKit.extensions.quick_tags.tag_array[m_id].title = title;\n\t\t\t\tXKit.extensions.quick_tags.tag_array[m_id].tags = tags;\n\n\t\t\t\tXKit.storage.set(\"quick_tags\", \"user_tags\", JSON.stringify(XKit.extensions.quick_tags.tag_array));\n\n\t\t\t\tXKit.window.close();\n\t\t\t\tXKit.extensions.quick_tags.cpanel(m_div);\n\t\t\t\tXKit.extensions.xkit_preferences.restart_extension(\"quick_tags\");\n\n\t\t\t});\n\n\n\t\t});\n\n\t\t$(\".xkit-quick-tags-tag-delete\").click(function() {\n\n\t\t\ttry {\n\n\t\t\t\tvar m_id = $(this).attr('data-id');\n\n\t\t\t\tXKit.extensions.quick_tags.tag_array.splice(m_id, 1);\n\n\t\t\t\tXKit.storage.set(\"quick_tags\", \"user_tags\", JSON.stringify(XKit.extensions.quick_tags.tag_array));\n\n\t\t\t\tXKit.extensions.quick_tags.cpanel(m_div);\n\t\t\t\tXKit.extensions.xkit_preferences.restart_extension(\"quick_tags\");\n\n\t\t\t} catch (e) {\n\n\t\t\t\tconsole.log(\"quick-tags cp delete -> \" + e.message);\n\n\t\t\t}\n\n\t\t});\n\n\t\t$(\"#xkit-extensions-panel-right\").nanoScroller();\n\t\t$(\"#xkit-extensions-panel-right\").nanoScroller({ scroll: 'top' });\n\n\t\tXKit.extensions.quick_tags.infoCpanel(m_div);\n\t},\n\n\tinfoCpanel: function(m_div) {\n\n\t\t$('.xkit-quick-tags-cp-info').remove();\n\t\t$(m_div).prepend(`\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\tThe XKit Rewritten extension includes a new version of this script. It fixes post formatting becoming broken when tags are added and adds a quick tag button to the post editor!\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\tTo migrate easily, install XKit Rewritten and enable its Quick Tags feature in your browser toolbar, then refresh this page and press this button to copy your tag bundles:\n\t\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t`);\n\n\t\t$('#xkit-quick-tags-cp-export').on('click', async function() {\n\t\t\tif (!XKit.extensions.quick_tags.tag_array.length) {\n\t\t\t\tXKit.window.show(\n\t\t\t\t\t'Nothing to Copy',\n\t\t\t\t\t\"You don't have any tag bundles to copy!\",\n\t\t\t\t\t'error',\n\t\t\t\t\t'
OK
',\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.setAttribute('disabled', '');\n\t\t\tthis.classList.add('disabled');\n\n\t\t\tlet succeeded = false;\n\n\t\t\twindow.addEventListener('xkit-quick-tags-migration-success', () => { succeeded = true; }, { once: true });\n\t\t\twindow.dispatchEvent(new CustomEvent('xkit-quick-tags-migration', { detail: JSON.stringify(XKit.extensions.quick_tags.tag_array) }));\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.removeAttribute('disabled');\n\t\t\t\tthis.classList.remove('disabled');\n\n\t\t\t\tif (succeeded) {\n\t\t\t\t\tXKit.extensions.xkit_preferences.close();\n\t\t\t\t} else {\n\t\t\t\t\tXKit.window.show(\n\t\t\t\t\t\t'Failure',\n\t\t\t\t\t\t'Make sure you have installed XKit Rewritten v0.23.5 or later, have refreshed the page, and have enabled Quick Tags.',\n\t\t\t\t\t\t'error',\n\t\t\t\t\t\t'
';\n\n\t\t\t$(\".controls_section:eq(1)\").after(m_html);\n\t\t\t$(\"#xkit-search-likes-ul\").before(x_html);\n\n\t\t\t$(\"#xkit-search-likes-button\").click(function() {\n\n\t\t\t\tXKit.extensions.search_likes.search_start();\n\n\t\t\t\treturn false;\n\t\t\t});\n\n\t\t\t$(\"#xkit-search-likes-input\").keyup(function() {\n\n\t\t\t\tvar m_value = $(this).val().toLowerCase();\n\t\t\t\tm_value = $.trim(m_value);\n\n\t\t\t\t$(\".xkit-search-likes-done\").removeClass(\"xkit-search-likes-done\");\n\t\t\t\tXKit.extensions.search_likes.term = m_value;\n\t\t\t\tXKit.extensions.search_likes.search_do_posts();\n\n\t\t\t\t$(\".xkit-search-likes-done\").removeClass(\"xkit-search-likes-done\").removeClass(\"xkit-search-likes-found\");\n\n\t\t\t});\n\n\t\t}\n\n\t},\n\n\tterm: \"\",\n\tpage: 0,\n\tscooping: false,\n\n\tupdate_rect: function() {\n\n\t\tXKit.tools.add_function(function() {\n\t\t\tTumblr.Events.trigger(\"DOMEventor:updateRect\");\n\t\t}, true, \"\");\n\n\t},\n\n\tsearch_do_posts: function() {\n\n\t\tvar m_term = XKit.extensions.search_likes.term;\n\n\t\tif (m_term.length <= 2) {\n\n\t\t\t// Show all.\n\n\t\t\t$(\".post\").parent().not(\"#right_column\").addClass(\"xkit-search-likes-force-found\");\n\t\t\t$(\".post\").parent().slideDown('fast');\n\n\t\t\t$(\"#xkit-search-likes-status-bar\").remove();\n\n\t\t\tXKit.extensions.search_likes.update_rect();\n\t\t\t$(\".post:gt(20)\").parent().remove();\n\n\t\t\tXKit.extensions.search_likes.page = 0;\n\t\t\tXKit.extensions.search_likes.scooping = false;\n\n\t\t\treturn;\n\t\t} else {\n\n\t\t\t$(\".xkit-search-likes-force-found\").not(\"#right_column\").removeClass(\"xkit-search-likes-force-found\");\n\n\t\t}\n\n\t\tvar i_html = \"Searching for \\\"\" + m_term + \"\\\" 0 results found so far, inspected 0 posts. Scroll down to load more posts and results.\";\n\n\t\tif ($(\"#xkit-search-likes-status-bar\").length > 0) {\n\t\t\t$(\"#xkit-search-likes-status-bar\").html(i_html);\n\t\t} else {\n\t\t\t$(\"#posts\").before(\"
\" + i_html + \"
\");\n\t\t}\n\n\t\t// Remove the unnecessary posts.\n\t\t$(\".post_container.xkit-search-likes-done-container:gt(20)\").not(\".xkit-search-likes-found\").remove();\n\n\t\tvar multi_array = [];\n\n\t\t$(\".post\").not(\"#tumblr_radar\").each(function() {\n\n\t\t\tvar post_id = $(this).attr('data-post-id');\n\n\t\t\tif (multi_array.indexOf(post_id) !== -1) {\n\t\t\t\tconsole.log(\" >>> !! Multiple same posts found, removing this one.\");\n\t\t\t\t$(this).remove(); return;\n\t\t\t} else {\n\t\t\t\tmulti_array.push(post_id);\n\t\t\t}\n\n\t\t});\n\n\t\t$(\".post\").not(\"#tumblr_radar\").not(\"xkit-search-likes-done\").each(function() {\n\n\t\t\tvar username = $(this).attr('data-tumblelog-name');\n\t\t\tvar hide_this = false;\n\n\t\t\t$(this).addClass(\"xkit-search-likes-done\");\n\n\t\t\tvar to_search_in = $(this).find(\".post_content\").text().toLowerCase();\n\n\t\t\tif ($(this).find(\".post_tag\").length > 0) {\n\n\t\t\t\t$(this).find(\".post_tag\").each(function() {\n\n\t\t\t\t\tto_search_in = to_search_in + \" \" + $(this).html().toLowerCase();\n\t\t\t\t\tto_search_in = to_search_in + \" \" + $(this).html().toLowerCase().substring(1);\n\n\t\t\t\t});\n\n\t\t\t}\n\n\t\t\tif (typeof username !== \"undefined\") {\n\t\t\t\tto_search_in = to_search_in + username;\n\t\t\t}\n\n\t\t\tdocument.title = m_term;\n\n\t\t\tif (to_search_in.indexOf(m_term) === -1) {\n\t\t\t\thide_this = true;\n\t\t\t}\n\n\t\t\t$(this).parent().addClass(\"xkit-search-likes-done-container\");\n\n\t\t\tif (!hide_this) {\n\n\t\t\t\t$(this).parent().slideDown('fast');\n\t\t\t\t$(this).parent().addClass(\"xkit-search-likes-found\");\n\n\t\t\t\t$(this).find(\".post_body\").find(\"mark\").contents().unwrap();\n\t\t\t\tvar m_html = XKit.extensions.search_likes.return_highlighted_html($(this).find(\".post_body\").html(), m_term);\n\t\t\t\t$(this).find(\".post_body\").html(m_html);\n\n\t\t\t} else {\n\n\t\t\t\t$(this).parent().slideUp('fast');\n\t\t\t\t$(this).parent().removeClass(\"xkit-search-likes-found\");\n\t\t\t\t$(this).find(\".post_body\").find(\"mark\").contents().unwrap();\n\n\t\t\t}\n\n\t\t});\n\n\t\tif ($(\".xkit-search-likes-found\").length <= 20) {\n\n\t\t\tXKit.extensions.search_likes.scooping = true;\n\t\t\tXKit.extensions.search_likes.scoop();\n\n\t\t}\n\n\t\t$(\"#xkit-search-likes-found-count\").html($(\".xkit-search-likes-found\").length);\n\t\t$(\"#xkit-search-likes-total-count\").html($(\".post\").length);\n\n\t},\n\n\tscoop: function() {\n\n\t\tXKit.extensions.search_likes.page++;\n\n\t\tGM_xmlhttpRequest({\n\t\t\tmethod: \"GET\",\n\t\t\turl: \"http://www.tumblr.com/likes/page/\" + XKit.extensions.search_likes.page,\n\t\t\tjson: false,\n\t\t\theaders: {\n\t\t\t\t\"X-Requested-With\": \"XMLHttpRequest\",\n\t\t\t},\n\t\t\tonerror: function(response) {\n\t\t\t\tif (!XKit.extensions.search_likes.scooping) { return; }\n\t\t\t\tsetTimeout(function() { XKit.extensions.search_likes.scoop(); }, 200);\n\t\t\t},\n\t\t\tonload: function(response) {\n\n\t\t\t\tif (!XKit.extensions.search_likes.scooping) { return; }\n\n\t\t\t\tvar m_posts = $(\".post\", response.responseText);\n\n\t\t\t\tvar add_these = true;\n\n\t\t\t\t$(m_posts).each(function() {\n\n\t\t\t\t\tvar m_search = $(this).attr('id');\n\n\t\t\t\t\tif ($(\"#\" + m_search).length > 0) {\n\t\t\t\t\t\t// This set is already present.\n\t\t\t\t\t\tadd_these = false;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t});\n\n\t\t\t\tif (add_these) {\n\n\t\t\t\t\tconsole.log(\"Search Likes Scooping: Found and adding!\");\n\t\t\t\t\t$(\"#posts\").append(response.responseText);\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.log(\"Search Likes Scooping: This set already present, skipping.\");\n\n\t\t\t\t}\n\n\t\t\t\tif ($(\".xkit-search-likes-found\").length >= 5) {\n\n\t\t\t\t\tconsole.log(\"Search Likes Scooping: No need to scoop anymore, stopping!\");\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tsetTimeout(function() { XKit.extensions.search_likes.scoop(); }, 200);\n\n\t\t\t}\n\t\t});\n\n\t},\n\n\treturn_highlighted_html: function(src_str, term) {\n\n\t\t/* from http://jsfiddle.net/UPs3V/ */\n\n\t\ttry {\n\n\t\t\tterm = term.replace(/(\\s+)/, \"(<[^>]+>)*$1(<[^>]+>)*\");\n\t\t\tvar pattern = new RegExp(\"(\" + term + \")\", \"i\");\n\n\t\t\tsrc_str = src_str.replace(pattern, \"$1\");\n\t\t\tsrc_str = src_str.replace(/([^<>]*)((<[^>]+>)+)([^<>]*<\\/mark>)/, \"$1$2$4\");\n\n\t\t\treturn src_str;\n\n\t\t} catch (e) {\n\n\t\t\treturn src_str;\n\n\t\t}\n\n\t},\n\n\tsearch_start: function() {\n\n\t\t$(\"#xkit-search-likes-button\").toggleClass(\"xkit-in-search\");\n\n\t\tif ($(\"#xkit-search-likes-button\").hasClass(\"xkit-in-search\")) {\n\n\t\t\t$(\"#xkit-search-likes-li\").addClass(\"selected\");\n\n\t\t\tXKit.extensions.search_likes.term = \"\";\n\t\t\t$(\"#xkit-search-likes-input\").val(\"\");\n\n\t\t\t$(\"#right_column\").children().not(\"#xkit-search-likes-ul\").not(\"#xkit-search-likes-box\").slideUp('fast');\n\t\t\t$(\"#xkit-search-likes-box\").slideDown('slow');\n\n\t\t\tXKit.post_listener.add(\"search_likes\", XKit.extensions.search_likes.search_do_posts);\n\t\t\tXKit.extensions.search_likes.search_do_posts();\n\n\t\t\tXKit.tools.add_css(\" #posts.posts>.post_container { display: none; } \", \"search-likes-in-search\");\n\n\t\t} else {\n\n\t\t\t$(\"#xkit-search-likes-li\").removeClass(\"selected\");\n\n\t\t\tXKit.post_listener.remove(\"search_likes\", XKit.extensions.search_likes.search_do_posts);\n\t\t\tXKit.tools.remove_css(\"search-likes-in-search\");\n\n\t\t\t$(\".post\").not(\"#tumblr_radar\").parent().addClass(\"xkit-search-likes-found\");\n\t\t\t$(\".post\").not(\"#tumblr_radar\").parent().slideDown('fast');\n\n\t\t\t$(\".xkit-search-likes-done\").removeClass(\"xkit-search-likes-done\");\n\n\t\t\t$(\"#xkit-search-likes-status-bar\").slideUp('slow', function() { $(this).remove(); });\n\n\t\t\tXKit.extensions.search_likes.update_rect();\n\n\t\t\t$(\".post:gt(30)\").parent().remove();\n\n\t\t\t$(\"#right_column\").children().not(\"#xkit-search-likes-ul\").not(\"#xkit-search-likes-box\").slideDown('slow');\n\t\t\t$(\"#xkit-search-likes-box\").slideUp('slow');\n\n\t\t}\n\n\t},\n\n\tdestroy: function() {\n\t\tthis.running = false;\n\t}\n\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpGNzdGMTE3NDA3MjA2ODExODA4MzkyMjM2MzU5MTQ4NCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxRUEzMUE4MDQ5ODkxMUUzOEY0QUFCOTZENUUwMDJFRiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxRUEzMUE3RjQ5ODkxMUUzOEY0QUFCOTZENUUwMDJFRiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjAxODAxMTc0MDcyMDY4MTFBRTczREVDNEM5OEM0RTE5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkY3N0YxMTc0MDcyMDY4MTE4MDgzOTIyMzYzNTkxNDg0Ii8+IDwvcmRmOkRlc2NyaXB0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","css":"#xkit-search-likes-box { display: none; padding-top: 6px; }\n\n#xkit-search-likes-button:after {\n\n\tbackground-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDRBQkU4RjMzNkU2MTFFM0E0MTFDNDE2OTFDMzA4QzciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDRBQkU4RjQzNkU2MTFFM0E0MTFDNDE2OTFDMzA4QzciPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowNEFCRThGMTM2RTYxMUUzQTQxMUM0MTY5MUMzMDhDNyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowNEFCRThGMjM2RTYxMUUzQTQxMUM0MTY5MUMzMDhDNyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PuSNlSQAAAEbSURBVHjaYvz//z8DNQETDvEcIL4PxK+B+D0Q3wJiL2IMZERzoSYQX8Oj/hsQ8wDxf2IM1AbiK0hyZ4B4GRCzQF0sh6wPp5UgA6EYGQgjicOwFZL8OyzyYAxj5CMpFsGlGIhDkNS54DPwIVTRGTyGwfBzqNq52ORhscwFpZcSEZEXoDQPvmTDQjCwMQEzPgPfQulCIgxygtIf8MWyB1JgW+IJvxIkddL4IgU92QRjUVyMJP8Fl6XoOQWZ8xSIrwLxPyC2B2JONM+dBmIzfAkbhJmA+PV/3ABd7hwhF8KAOxAHATEfELMB8XMgboXSJ4DYHKdLiUjI2PAZNJdeR0/YpAITaOEBA/dwFV+kgttQ7EUtA4kusckGAAEGAGOJAD0xp7muAAAAAElFTkSuQmCC');\n\tcontent: \"A\";\n\tfont-size: 0;\n\twidth: 24px;\n\tbackground-repeat: no-repeat;\n\tbackground-position: 3px 7px;\n\topacity: 0.42;\n\n}\n\n#xkit-search-likes-input {\n\twidth: 100%;\n\tborder-radius: 3px;\n\tborder: 0px;\n\tpadding: 5px 10px 5px 30px;\n\tmargin-top: 0px;\n\tmargin-right: 5px;\n\tmargin-bottom: 0;\n\tmargin-left: 0px;\n\tfont-size: 15px;\n\tbox-sizing: border-box;\n\t-webkit-box-sizing: border-box;\n\t-o-box-sizing: border-box;\n\t-moz-box-sizing: border-box;\n\tbackground: white 10px 50% no-repeat url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjMxRTZFMEZBODY4MTFFMkFDMDJFMzk3N0RDMDc2NDQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjMxRTZFMTBBODY4MTFFMkFDMDJFMzk3N0RDMDc2NDQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCMzFFNkUwREE4NjgxMUUyQUMwMkUzOTc3REMwNzY0NCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCMzFFNkUwRUE4NjgxMUUyQUMwMkUzOTc3REMwNzY0NCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pnjwe50AAADhSURBVHjalJExEoIwEEVDvAAdpUeQhhk7OQKeAO2k4wh6AztK4w04AvYUUNp5BDwB/sz8MGsGh/HP/MmyyctulmAcR2VVVdUOSwnHcAg38LUoiofyFFgIQI7YqHkZgEeZWEVRZCvU8ACfcGCfJMmlbVtbKYO3iDvkng7SbMmqBHB3G2wr4+dZVtJ8g5KAB3bujIRC9ac0p+Sm9yXkNqzy8iE3tVqCiNdiz8yN/Ib4wFzHVb7DTjbFG/sJ4s25+LmKLRnmQglO0C/xXY0AY700KbaUErDVh8VK3mAGXPL+CDAAWp9eZGKACQQAAAAASUVORK5CYII=') !important;\n}\n\n#xkit-search-likes-input::-webkit-input-placeholder { color: #999; }\n#xkit-search-likes-input:-moz-placeholder { color: #999; }\n#xkit-search-likes-input:placeholder { color: #999; }\n\n.xkit-search-likes-force-found, .xkit-search-likes-found { display: block !important; }\n\n#xkit-search-likes-status-bar {\n\tbackground: rgba(0,0,0,0.12);\n\tborder: 1px solid rgba(0,0,0,0.22);\n\tcolor: rgba(255,255,255,0.53);\n\tpadding: 10px 14px;\n\tborder-radius: 6px;\n\tmargin-bottom: 15px;\n}","title":"Search Likes","description":"Lets you search likes","developer":"STUDIOXENIX","version":"0.3.3","details":"This is a very experimental extension that lets you search the posts you've liked by URL or text. Just go to your likes page, then click on Search button to get started.","frame":"false","beta":"false","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/servant.json b/Extensions/dist/servant.json
new file mode 100644
index 000000000..31c28b7f9
--- /dev/null
+++ b/Extensions/dist/servant.json
@@ -0,0 +1 @@
+{"id":"servant","script":"//* TITLE Servant **//\n//* VERSION 0.6.1 **//\n//* DESCRIPTION XKit Personal Assistant **//\n//* DETAILS Automator for XKit: lets you create little Servants that does tasks for you when the conditions you've set are met. **//\n//* DEVELOPER new-xkit **//\n//* FRAME false **//\n//* SLOW true **//\n//* BETA false **//\n\nXKit.extensions.servant = new Object({\n\n\trunning: false,\n\tslow: true,\n\n\tservants: [],\n\n\tpreferences: {\n\t\t\"sep2\": {\n\t\t\ttext: \"My Servants\",\n\t\t\ttype: \"separator\"\n\t\t}\n\t},\n\n\tcauses: {\n\n\t\tsep_1: {\n\n\t\t\ttext: \"Posts on Dashboard\",\n\t\t\ttype: \"separator\"\n\n\t\t},\n\n\t\tcontains: {\n\n\t\t\ttext: \"Post Contains\",\n\t\t\ttype: \"text\",\n\t\t\tcompatibility: \"post\",\n\t\t\tplaceholder: \"ie: 'Mitt Romney'\",\n\t\t\treturns: \"the word found\",\n\t\t\truns_on: \"post\",\n\t\t\tdescription: \"Runs if a post containing the word you've entered is found, affects that post.\",\n\n\t\t\trun: function(parameter, obj) {\n\n\t\t\t\tvar m_object = {};\n\n\t\t\t\tvar m_text = $(obj).find(\".post_content\").text();\n\n\t\t\t\tif ($(obj).find(\".post_title\").length > 0) {\n\t\t\t\t\tm_text = m_text + \" \" + $(obj).find(\".post_title\").text();\n\t\t\t\t}\n\n\t\t\t\tm_text = m_text.toLowerCase();\n\t\t\t\tparameter = parameter.toLowerCase();\n\n\t\t\t\tif (m_text.indexOf(parameter) !== -1) {\n\n\t\t\t\t\tm_object.run = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tm_object.run = false;\n\n\t\t\t\t}\n\n\t\t\t\tm_object.return = parameter;\n\t\t\t\tm_object.pass = $(obj);\n\t\t\t\treturn m_object;\n\n\t\t\t},\n\n\t\t},\n\n\t\tcontains_not: {\n\n\t\t\ttext: \"Post Doesn't Contain\",\n\t\t\ttype: \"text\",\n\t\t\tcompatibility: \"post\",\n\t\t\tplaceholder: \"ie: 'Mitt Romney'\",\n\t\t\treturns: \"the word not found\",\n\t\t\truns_on: \"post\",\n\t\t\tdescription: \"Runs if a post containing the word you've entered is not found, affects that post.\",\n\n\t\t\trun: function(parameter, obj) {\n\n\t\t\t\tvar m_object = {};\n\n\t\t\t\tvar m_text = $(obj).find(\".post_body\").text();\n\n\t\t\t\tif ($(obj).find(\".post_title\").length > 0) {\n\t\t\t\t\tm_text = m_text + \" \" + $(obj).find(\".post_title\").text();\n\t\t\t\t}\n\n\t\t\t\tm_text = m_text.toLowerCase();\n\t\t\t\tparameter = parameter.toLowerCase();\n\n\t\t\t\tif (m_text.indexOf(parameter) == -1) {\n\n\t\t\t\t\tm_object.run = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tm_object.run = false;\n\n\t\t\t\t}\n\n\t\t\t\tm_object.return = parameter;\n\t\t\t\tm_object.pass = $(obj);\n\t\t\t\treturn m_object;\n\n\t\t\t},\n\n\t\t},\n\n\t\tmade_by: {\n\n\t\t\ttext: \"Post is from\",\n\t\t\ttype: \"text\",\n\t\t\tcompatibility: \"post\",\n\t\t\truns_on: \"post\",\n\t\t\treturns: \"the owner's URL\",\n\t\t\tplaceholder: \"ie: 'new-xkit-extension'\",\n\t\t\tdescription: \"Runs if a post is created/reblogged from the URL you've entered is found, affects that post.\",\n\n\t\t\trun: function(parameter, obj) {\n\n\t\t\t\tvar m_object = {};\n\n\t\t\t\tm_object.run = false;\n\n\t\t\t\tif ($(obj).attr('data-tumblelog-name') === parameter) {\n\t\t\t\t\tm_object.run = true;\n\t\t\t\t}\n\n\t\t\t\tm_object.return = parameter;\n\t\t\t\tm_object.pass = $(obj);\n\t\t\t\treturn m_object;\n\n\t\t\t},\n\n\t\t},\n\n\t\tsourced: {\n\n\t\t\ttext: \"Post is sourced from\",\n\t\t\ttype: \"text\",\n\t\t\tcompatibility: \"post\",\n\t\t\truns_on: \"post\",\n\t\t\treturns: \"the source URL\",\n\t\t\tplaceholder: \"ie: 'new-xkit-extension'\",\n\t\t\tdescription: \"Runs if a post is sourced to the URL you've entered is found, affects that post.\",\n\n\t\t\trun: function(parameter, obj) {\n\n\t\t\t\tvar m_object = {};\n\n\t\t\t\tm_object.run = false;\n\n\t\t\t\tif ($(obj).find(\".post_source_link\").length > 0) {\n\n\t\t\t\t\tif ($(obj).find(\".post_source_link\").attr('title') === parameter) {\n\t\t\t\t\t\tm_object.run = true;\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tm_object.return = parameter;\n\t\t\t\tm_object.pass = $(obj);\n\t\t\t\treturn m_object;\n\n\t\t\t},\n\n\t\t},\n\n\t\tis_original: {\n\n\t\t\ttext: \"Post is original\",\n\t\t\ttype: \"\",\n\t\t\tcompatibility: \"post\",\n\t\t\truns_on: \"post\",\n\t\t\tdescription: \"Runs if the post is original, not reblogged.\",\n\n\t\t\trun: function(parameter, obj) {\n\n\t\t\t\tvar m_object = {};\n\n\t\t\t\tvar m_post = XKit.interface.post($(obj));\n\t\t\t\tm_object.run = false;\n\n\t\t\t\tif (typeof m_post === \"undefined\") {\n\t\t\t\t\tm_object.run = false;\n\t\t\t\t} else {\n\t\t\t\t\tif (m_post.is_reblogged === false) {\n\t\t\t\t\t\tm_object.run = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tm_object.pass = $(obj);\n\t\t\t\treturn m_object;\n\n\t\t\t},\n\n\t\t},\n\n\t\tis_reblogged: {\n\n\t\t\ttext: \"Post is reblogged\",\n\t\t\ttype: \"\",\n\t\t\tcompatibility: \"post\",\n\t\t\truns_on: \"post\",\n\t\t\tdescription: \"Runs if the post is not original, but reblogged.\",\n\n\t\t\trun: function(parameter, obj) {\n\n\t\t\t\tvar m_object = {};\n\n\t\t\t\tvar m_post = XKit.interface.post($(obj));\n\t\t\t\tm_object.run = false;\n\n\t\t\t\tif (typeof m_post === \"undefined\") {\n\t\t\t\t\tm_object.run = false;\n\t\t\t\t} else {\n\t\t\t\t\tif (m_post.is_reblogged === true) {\n\t\t\t\t\t\tm_object.run = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tm_object.pass = $(obj);\n\t\t\t\treturn m_object;\n\n\t\t\t},\n\n\t\t},\n\n\t\tpost_type: {\n\n\t\t\ttext: \"Post type is\",\n\t\t\ttype: \"post_type\",\n\t\t\tcompatibility: \"post\",\n\t\t\truns_on: \"post\",\n\t\t\treturns: \"the post type\",\n\t\t\tdescription: \"Runs if a post is of the type you've selected\",\n\n\t\t\trun: function(parameter, obj) {\n\n\t\t\t\tvar m_object = {};\n\n\t\t\t\tvar search_for = parameter;\n\n\t\t\t\tif (search_for === \"text\") { search_for = \"regular\"; }\n\t\t\t\tif (search_for === \"chat\") { search_for = \"conversation\"; }\n\n\t\t\t\tvar m_post = XKit.interface.post($(obj));\n\t\t\t\tm_object.run = false;\n\n\t\t\t\tif (typeof m_post === \"undefined\") {\n\t\t\t\t\tm_object.run = false;\n\t\t\t\t} else {\n\t\t\t\t\tif (search_for === \"photo\") {\n\t\t\t\t\t\tif (m_post.type === \"photo\" || m_post.type === \"panorama\" || m_post.type === \"photoset\") {\n\t\t\t\t\t\t\tm_object.run = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (m_post.type === search_for) {\n\t\t\t\t\t\t\tm_object.run = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tm_object.pass = $(obj);\n\t\t\t\treturn m_object;\n\n\t\t\t},\n\n\t\t},\n\n\t\tpost_is_mine: {\n\n\t\t\ttext: \"Post is mine\",\n\t\t\ttype: \"\",\n\t\t\tcompatibility: \"post\",\n\t\t\truns_on: \"post\",\n\t\t\tdescription: \"Runs if you've reblogged/created this post.\",\n\n\t\t\trun: function(parameter, obj) {\n\n\t\t\t\tvar m_object = {};\n\n\t\t\t\tvar m_post = XKit.interface.post($(obj));\n\t\t\t\tm_object.run = false;\n\n\t\t\t\tif (typeof m_post === \"undefined\") {\n\t\t\t\t\tm_object.run = false;\n\t\t\t\t} else {\n\t\t\t\t\tif (m_post.is_mine === true) {\n\t\t\t\t\t\tm_object.run = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tm_object.pass = $(obj);\n\t\t\t\treturn m_object;\n\n\t\t\t},\n\n\t\t},\n\n\t\tpost_liked: {\n\n\t\t\ttext: \"Post is liked by me\",\n\t\t\ttype: \"\",\n\t\t\tcompatibility: \"post\",\n\t\t\truns_on: \"post\",\n\t\t\tdescription: \"Runs if you've already liked a post.\",\n\n\t\t\trun: function(parameter, obj) {\n\n\t\t\t\tvar m_object = {};\n\n\t\t\t\tvar m_post = XKit.interface.post($(obj));\n\t\t\t\tm_object.run = false;\n\n\t\t\t\tif (typeof m_post === \"undefined\") {\n\t\t\t\t\tm_object.run = false;\n\t\t\t\t} else {\n\t\t\t\t\tif (m_post.liked === true) {\n\t\t\t\t\t\tm_object.run = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tm_object.pass = $(obj);\n\t\t\t\treturn m_object;\n\n\t\t\t},\n\n\t\t},\n\n\t\tpost_not_done: {\n\n\t\t\ttext: \"There is a post (not recommended)\",\n\t\t\ttype: \"\",\n\t\t\tcompatibility: \"post\",\n\t\t\truns_on: \"post\",\n\t\t\tdescription: \"Runs on all posts. Not recommended.\",\n\n\t\t\trun: function(parameter, obj) {\n\n\t\t\t\tvar m_object = {};\n\n\t\t\t\tif ($(obj).hasClass(\"with_permalink\") && $(obj).hasClass(\"post_full\")) {\n\t\t\t\t\tm_object.run = true;\n\t\t\t\t} else {\n\t\t\t\t\tm_object.run = false;\n\t\t\t\t}\n\n\t\t\t\tm_object.pass = $(obj);\n\t\t\t\treturn m_object;\n\n\t\t\t},\n\n\t\t},\n\n\t\tsep_99a: {\n\n\t\t\ttext: \"Content Ratings\",\n\t\t\ttype: \"separator\"\n\n\t\t},\n\n\t\tpost_adult: {\n\n\t\t\ttext: \"The post is made/reblogged by an Adult blog\",\n\t\t\ttype: \"\",\n\t\t\tcompatibility: \"post\",\n\t\t\truns_on: \"post\",\n\t\t\tdescription: \"Runs on all posts reblogged/posted by a blog with Adult rating. (ie: a porn blog)\",\n\n\t\t\trun: function(parameter, obj) {\n\n\t\t\t\tvar m_object = {};\n\n\t\t\t\tif ($(obj).attr('data-tumblelog-content-rating') === \"adult\") {\n\t\t\t\t\tm_object.run = true;\n\t\t\t\t} else {\n\t\t\t\t\tm_object.run = false;\n\t\t\t\t}\n\n\t\t\t\tm_object.pass = $(obj);\n\t\t\t\treturn m_object;\n\n\t\t\t},\n\n\t\t},\n\n\t\tpost_nsfw: {\n\n\t\t\ttext: \"The post is made/reblogged by a NSFW blog\",\n\t\t\ttype: \"\",\n\t\t\tcompatibility: \"post\",\n\t\t\truns_on: \"post\",\n\t\t\tdescription: \"Runs on all posts reblogged/posted by a blog with NSFW rating. (ie: a blog that might post porn/nsfw stuff from time to time)\",\n\n\t\t\trun: function(parameter, obj) {\n\n\t\t\t\tvar m_object = {};\n\n\t\t\t\tif ($(obj).attr('data-tumblelog-content-rating') === \"nsfw\") {\n\t\t\t\t\tm_object.run = true;\n\t\t\t\t} else {\n\t\t\t\t\tm_object.run = false;\n\t\t\t\t}\n\n\t\t\t\tm_object.pass = $(obj);\n\t\t\t\treturn m_object;\n\n\t\t\t},\n\n\t\t},\n\n\t\tpost_nsfw_adult: {\n\n\t\t\ttext: \"The post is made/reblogged by a NSFW/adult blog\",\n\t\t\ttype: \"\",\n\t\t\tcompatibility: \"post\",\n\t\t\truns_on: \"post\",\n\t\t\tdescription: \"Runs on all posts reblogged/posted by a blog with an Adult or NSFW rating.\",\n\n\t\t\trun: function(parameter, obj) {\n\n\t\t\t\tvar m_object = {};\n\n\t\t\t\tif ($(obj).attr('data-tumblelog-content-rating') === \"adult\" || $(obj).attr('data-tumblelog-content-rating') === \"nsfw\") {\n\t\t\t\t\tm_object.run = true;\n\t\t\t\t} else {\n\t\t\t\t\tm_object.run = false;\n\t\t\t\t}\n\n\t\t\t\tm_object.pass = $(obj);\n\t\t\t\treturn m_object;\n\n\t\t\t},\n\n\t\t},\n\n\t\tsep_99: {\n\n\t\t\ttext: \"Pages\",\n\t\t\ttype: \"separator\"\n\n\t\t},\n\n\t\ton_dashboard: {\n\n\t\t\ttext: \"I'm on the dashboard\",\n\t\t\ttype: \"page\",\n\t\t\tcompatibility: \"\",\n\t\t\tdescription: \"Runs if you are on the dashboard\",\n\n\t\t\trun: function() {\n\n\t\t\t\tvar m_object = {};\n\n\t\t\t\tm_object.run = (XKit.interface.where().dashboard);\n\t\t\t\tm_object.return = \"\";\n\n\t\t\t\treturn m_object;\n\n\t\t\t},\n\n\t\t},\n\n\t\ton_inbox: {\n\n\t\t\ttext: \"I'm on the inbox\",\n\t\t\ttype: \"page\",\n\t\t\tcompatibility: \"\",\n\t\t\tdescription: \"Runs if you are on the inbox page\",\n\n\t\t\trun: function() {\n\n\t\t\t\tvar m_object = {};\n\n\t\t\t\tm_object.run = (XKit.interface.where().inbox);\n\t\t\t\tm_object.return = \"\";\n\n\t\t\t\treturn m_object;\n\n\t\t\t},\n\n\t\t},\n\n\t\ton_channel: {\n\n\t\t\ttext: \"I'm on a blog posts page (/blog/[url])\",\n\t\t\ttype: \"page\",\n\t\t\tcompatibility: \"\",\n\t\t\tdescription: \"Runs if you are posts page of your blog\",\n\n\t\t\trun: function() {\n\n\t\t\t\tvar m_object = {};\n\n\t\t\t\tm_object.run = (XKit.interface.where().channel && $(\"body\").hasClass(\"dashboard_index\"));\n\t\t\t\tm_object.return = \"\";\n\n\t\t\t\treturn m_object;\n\n\t\t\t},\n\n\t\t},\n\n\t\ton_likes: {\n\n\t\t\ttext: \"I'm on my likes page\",\n\t\t\ttype: \"page\",\n\t\t\tcompatibility: \"\",\n\t\t\tdescription: \"Runs if you are on the likes page\",\n\n\t\t\trun: function() {\n\n\t\t\t\tvar m_object = {};\n\n\t\t\t\tm_object.run = (document.location.href.indexOf('www.tumblr.com/likes') !== -1);\n\t\t\t\tm_object.return = \"\";\n\n\t\t\t\treturn m_object;\n\n\t\t\t},\n\n\t\t},\n\n\t\ton_queue: {\n\n\t\t\ttext: \"I'm on the queue page\",\n\t\t\ttype: \"page\",\n\t\t\tcompatibility: \"\",\n\t\t\tdescription: \"Runs if you are on the queue page of your blog\",\n\n\t\t\trun: function() {\n\n\t\t\t\tvar m_object = {};\n\n\t\t\t\tm_object.run = (XKit.interface.where().queue);\n\t\t\t\tm_object.return = \"\";\n\n\t\t\t\treturn m_object;\n\n\t\t\t},\n\n\t\t},\n\n\t\ton_drafts: {\n\n\t\t\ttext: \"I'm on the drafts page\",\n\t\t\ttype: \"page\",\n\t\t\tcompatibility: \"\",\n\t\t\tdescription: \"Runs if you are on the drafts page of your blog\",\n\n\t\t\trun: function() {\n\n\t\t\t\tvar m_object = {};\n\n\t\t\t\tm_object.run = (XKit.interface.where().drafts);\n\t\t\t\tm_object.return = \"\";\n\n\t\t\t\treturn m_object;\n\n\t\t\t},\n\n\t\t},\n\n\t\ton_search: {\n\n\t\t\ttext: \"I'm on a tracked tag or search\",\n\t\t\ttype: \"page\",\n\t\t\tcompatibility: \"\",\n\t\t\tdescription: \"Runs if you are on the a tracked tag page or on search\",\n\n\t\t\trun: function() {\n\n\t\t\t\tvar m_object = {};\n\n\t\t\t\tif (document.location.href.indexOf(\"www.tumblr.com/tagged/\") !== -1 || document.location.href.indexOf(\"www.tumblr.com/search/\") !== -1) {\n\t\t\t\t\tm_object.run = true;\n\t\t\t\t} else {\n\t\t\t\t\tm_object.run = false;\n\t\t\t\t}\n\n\t\t\t\tm_object.return = \"\";\n\n\t\t\t\treturn m_object;\n\n\t\t\t},\n\n\t\t},\n\n\t\tsep_50: {\n\n\t\t\ttext: \"Date and Time\",\n\t\t\ttype: \"separator\"\n\n\t\t},\n\n\t\ttime_night: {\n\n\t\t\ttext: \"It's night\",\n\t\t\ttype: \"time\",\n\t\t\tcompatibility: \"\",\n\t\t\treturns: \"the hour, in 24-hour format\",\n\t\t\tdescription: \"Runs each time you refresh the page, if the time is between 6 pm and 6 am\",\n\n\t\t\trun: function() {\n\n\t\t\t\tvar m_object = {};\n\n\t\t\t\tvar m_hour = new Date().getHours();\n\n\t\t\t\tif (!(m_hour >= 6 && m_hour < 18)) {\n\t\t\t\t\tm_object.run = true;\n\t\t\t\t} else {\n\t\t\t\t\tm_object.run = false;\n\t\t\t\t}\n\n\t\t\t\tm_object.return = m_hour;\n\n\t\t\t\treturn m_object;\n\n\t\t\t},\n\n\t\t},\n\n\t\ttime_weekend: {\n\n\t\t\ttext: \"It's weekend\",\n\t\t\ttype: \"time\",\n\t\t\tcompatibility: \"\",\n\t\t\tdescription: \"Runs each time you refresh the page, if the day is saturday or sunday\",\n\n\t\t\trun: function() {\n\n\t\t\t\tvar m_object = {};\n\n\t\t\t\tvar m_today = new Date();\n\n\t\t\t\tif (m_today.getDay() === 6 || m_today.getDay() === 0) {\n\t\t\t\t\tm_object.run = true;\n\t\t\t\t} else {\n\t\t\t\t\tm_object.run = false;\n\t\t\t\t}\n\n\t\t\t\tm_object.return = \"\";\n\n\t\t\t\treturn m_object;\n\n\t\t\t},\n\n\t\t},\n\n\t\ttime_weekday: {\n\n\t\t\ttext: \"It's weekday\",\n\t\t\ttype: \"time\",\n\t\t\tcompatibility: \"\",\n\t\t\tdescription: \"Runs each time you refresh the page, if the day is not a saturday or a sunday\",\n\n\t\t\trun: function() {\n\n\t\t\t\tvar m_object = {};\n\n\t\t\t\tvar m_today = new Date();\n\n\t\t\t\tif (m_today.getDay() !== 6 && m_today.getDay() !== 0) {\n\t\t\t\t\tm_object.run = true;\n\t\t\t\t} else {\n\t\t\t\t\tm_object.run = false;\n\t\t\t\t}\n\n\t\t\t\tm_object.return = \"\";\n\n\t\t\t\treturn m_object;\n\n\t\t\t},\n\n\t\t},\n\n\t\ttime_day: {\n\n\t\t\ttext: \"The day is\",\n\t\t\ttype: \"day\",\n\t\t\treturns: \"the date (0=sunday, 6=saturday)\",\n\t\t\tdescription: \"Runs if the day is the thingy you've selected\",\n\n\t\t\trun: function(parameter, obj) {\n\n\t\t\t\tvar m_object = {};\n\n\t\t\t\tvar m_today = new Date();\n\n\t\t\t\tif (m_today.getDay() == parameter) {\n\t\t\t\t\tm_object.run = true;\n\t\t\t\t} else {\n\t\t\t\t\tm_object.run = false;\n\t\t\t\t}\n\n\t\t\t\tm_object.return = \"\";\n\n\t\t\t\treturn m_object;\n\n\t\t\t},\n\n\t\t},\n\n\t\tsep_100: {\n\n\t\t\ttext: \"Other\",\n\t\t\ttype: \"separator\"\n\n\t\t},\n\n\t\trun_js: {\n\n\t\t\ttext: \"Run Javascript Code\",\n\t\t\tcompatibility: \"\",\n\t\t\ttype: \"textarea\",\n\t\t\tplaceholder: \"ie: 'if (mary.has_lamb == true) {\\n\\treturn true;\\n }'\",\n\t\t\tdescription: \"Lets you run Javascript Code. JQuery and XKit API is supported.\",\n\n\t\t\trun: function(parameter, returns) {\n\n\t\t\t\tvar m_object = {};\n\n\t\t\t\tvar m_return = false;\n\n\t\t\t\ttry {\n\t\t\t\t\tm_return = eval(parameter + \"\\n//# sourceURL=xkit/servant/servant\" + (new Date()).getTime() + \".js\");\n\t\t\t\t} catch (e) {\n\t\t\t\t\tm_return = false;\n\t\t\t\t\tconsole.error(\"Unable to run Servant! ---> \" + e.message);\n\t\t\t\t}\n\n\t\t\t\tm_object.run = m_return;\n\t\t\t\tm_object.return = \"\";\n\n\t\t\t\treturn m_object;\n\n\t\t\t}\n\n\t\t},\n\n\t\tcivilization_ends: {\n\n\t\t\ttext: \"Civilization comes to an end\",\n\t\t\ttype: \"zombie_cat_attack\",\n\t\t\tcompatibility: \"\",\n\t\t\treturns: \"the cause (ie: 'zombies')\",\n\t\t\tdescription: \"Runs if a society no longer functions, due to reasons such as a Manbearpig being on the loose\",\n\n\t\t\trun: function() {\n\n\t\t\t\tvar m_object = {};\n\n\t\t\t\tm_object.run = false;\n\t\t\t\tm_object.return = \"zombies\";\n\n\t\t\t\treturn m_object;\n\n\t\t\t},\n\n\t\t},\n\n\t},\n\n\tactions: {\n\n\t\tsep_1: {\n\n\t\t\ttext: \"Generic\",\n\t\t\ttype: \"separator\"\n\n\t\t},\n\n\t\tdisplay_notification: {\n\n\t\t\ttext: \"Display notification\",\n\t\t\tcompatibility: \"\",\n\t\t\ttype: \"text\",\n\t\t\tplaceholder: \"ie: 'Wake up!'\",\n\t\t\tdescription: \"Displays an XKit notification on the bottom left of the screen.\",\n\n\t\t\trun: function(parameter, returns) {\n\n\t\t\t\tvar parameter_fixed = parameter;\n\n\t\t\t\tfor (var i = 0; i <= 10; i++) {\n\t\t\t\t\tparameter_fixed = parameter_fixed.replace(\"%\" + (i + 1), returns[i]);\n\t\t\t\t}\n\n\t\t\t\tXKit.notifications.add(parameter_fixed, \"ok\", true);\n\n\t\t\t}\n\n\t\t},\n\n\n\t\tdisplay_window: {\n\n\t\t\ttext: \"Display alert\",\n\t\t\tcompatibility: \"\",\n\t\t\ttype: \"text\",\n\t\t\tplaceholder: \"ie: 'Wake up!'\",\n\t\t\tdescription: \"Displays an alert window.\",\n\n\t\t\trun: function(parameter, returns) {\n\n\t\t\t\tvar parameter_fixed = parameter;\n\n\t\t\t\tfor (var i = 0; i <= 10; i++) {\n\t\t\t\t\tparameter_fixed = parameter_fixed.replace(\"%\" + (i + 1), returns[i]);\n\t\t\t\t}\n\n\t\t\t\tXKit.window.show(\"Servant Alert\", parameter_fixed, \"info\", \"
OK
\");\n\n\t\t\t}\n\n\t\t},\n\n\t\tsep_2: {\n\n\t\t\ttext: \"Post Related\",\n\t\t\ttype: \"separator\"\n\n\t\t},\n\n\t\tblock_post: {\n\n\t\t\ttext: \"Hide the post\",\n\t\t\tcompatibility: \"post\",\n\t\t\tdescription: \"Completely hides the post\",\n\n\t\t\trun: function(parameter, returns, to_pass, compatibility) {\n\n\t\t\t\t// Parameter -> \"%1 is happening!\"\n\t\t\t\t// Returns \t -> the list of %1s and stuff.\n\t\t\t\t// To_Pass \t -> passed objects, such as a post\n\t\t\t\t// Compatibility -> \"post\", \"time\", etc.\n\n\t\t\t\tfor (var i = 0; i < to_pass.length; i++) {\n\t\t\t\t\tif (compatibility[i] === \"post\") {\n\t\t\t\t\t\t$(to_pass[i]).remove();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\thighlight_post: {\n\n\t\t\ttext: \"Highlight the post\",\n\t\t\tcompatibility: \"post\",\n\t\t\tdescription: \"Highlight the post with a yellow glowing ring of glow.\",\n\n\t\t\trun: function(parameter, returns, to_pass, compatibility) {\n\n\t\t\t\tfor (var i = 0; i < to_pass.length; i++) {\n\t\t\t\t\tif (compatibility[i] === \"post\") {\n\t\t\t\t\t\t$(to_pass[i]).css(\"box-shadow\", \"0px 0px 10px 4px yellow\");\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\tdim_post: {\n\n\t\t\ttext: \"Dim the post\",\n\t\t\tcompatibility: \"post\",\n\t\t\tdescription: \"Dims the posts a lil bit.\",\n\n\t\t\trun: function(parameter, returns, to_pass, compatibility) {\n\n\t\t\t\t// Parameter -> \"%1 is happening!\"\n\t\t\t\t// Returns \t -> the list of %1s and stuff.\n\t\t\t\t// To_Pass \t -> passed objects, such as a post\n\t\t\t\t// Compatibility -> \"post\", \"time\", etc.\n\n\t\t\t\tvar on_click = function() {\n\t\t\t\t\tif ($(this).hasClass(\"active\")) {\n\t\t\t\t\t\t$(this).closest(\".post.post_full\").removeClass(\"xkit-servant-dimmed-but-active\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t$(this).closest(\".post.post_full\").addClass(\"xkit-servant-dimmed-but-active\");\n\t\t\t\t};\n\n\t\t\t\tfor (var i = 0; i < to_pass.length; i++) {\n\t\t\t\t\tif (compatibility[i] === \"post\") {\n\t\t\t\t\t\t$(to_pass[i]).addClass(\"xkit-servant-dimmed\");\n\t\t\t\t\t\t$(to_pass[i]).find(\".post_control_menu.creator\").click(on_click);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\tlike_post: {\n\n\t\t\ttext: \"Like the post\",\n\t\t\tcompatibility: \"post\",\n\t\t\tdescription: \"Automatically likes the post\",\n\n\t\t\trun: function(parameter, returns, to_pass, compatibility) {\n\n\t\t\t\t// Parameter -> \"%1 is happening!\"\n\t\t\t\t// Returns \t -> the list of %1s and stuff.\n\t\t\t\t// To_Pass \t -> passed objects, such as a post\n\t\t\t\t// Compatibility -> \"post\", \"time\", etc.\n\n\t\t\t\tfor (var i = 0; i < to_pass.length; i++) {\n\t\t\t\t\tif (compatibility[i] === \"post\") {\n\t\t\t\t\t\t$(to_pass[i]).find(\".post_control.like\").not(\".liked\").trigger('click');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\tunlike_post: {\n\n\t\t\ttext: \"Unlike the post\",\n\t\t\tcompatibility: \"post\",\n\t\t\tdescription: \"Automatically unlikes the post\",\n\n\t\t\trun: function(parameter, returns, to_pass, compatibility) {\n\n\t\t\t\t// Parameter -> \"%1 is happening!\"\n\t\t\t\t// Returns \t -> the list of %1s and stuff.\n\t\t\t\t// To_Pass \t -> passed objects, such as a post\n\t\t\t\t// Compatibility -> \"post\", \"time\", etc.\n\n\t\t\t\tfor (var i = 0; i < to_pass.length; i++) {\n\t\t\t\t\tif (compatibility[i] === \"post\") {\n\t\t\t\t\t\t$(to_pass[i]).find(\".post_control.like.liked\").trigger('click');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\tcolor_post: {\n\n\t\t\ttext: \"Colorize the post\",\n\t\t\tcompatibility: \"post\",\n\t\t\tdescription: \"Puts a colored band on top the post\",\n\t\t\ttype: \"color\",\n\n\t\t\trun: function(parameter, returns, to_pass, compatibility) {\n\n\t\t\t\t// Parameter -> \"%1 is happening!\"\n\t\t\t\t// Returns \t -> the list of %1s and stuff.\n\t\t\t\t// To_Pass \t -> passed objects, such as a post\n\t\t\t\t// Compatibility -> \"post\", \"time\", etc.\n\n\t\t\t\tfor (var i = 0; i < to_pass.length; i++) {\n\t\t\t\t\tif (compatibility[i] === \"post\") {\n\t\t\t\t\t\t$(to_pass[i]).addClass(\"servant-post-colorize\");\n\t\t\t\t\t\t$(to_pass[i]).addClass(\"servant-post-color_\" + parameter.replace(\"#\", \"\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\tsep_99: {\n\n\t\t\ttext: \"Flow\",\n\t\t\ttype: \"separator\"\n\n\t\t},\n\n\t\task_me: {\n\n\t\t\ttext: \"Ask me before continuing\",\n\t\t\tcompatibility: \"\",\n\t\t\ttype: \"text\",\n\t\t\tstop: true,\n\t\t\tplaceholder: \"ie: 'You really wanna run the code?'\",\n\t\t\tdescription: \"Shows a confirmation window before moving to the next action, stops if you cancel.\",\n\n\t\t\trun: function(parameter) {\n\n\t\t\t\tif (confirm(\"XKit Servant Message\\nPlease confirm the action.\\n\\n\" + parameter)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t},\n\n\t\tdelete: {\n\n\t\t\ttext: \"Delete this servant\",\n\t\t\tcompatibility: \"\",\n\t\t\ttype: \"flow\",\n\t\t\tstop: true,\n\t\t\tdescription: \"Deletes this servant completely.\",\n\n\t\t\trun: function(parameters, returns, to_pass, compatibility, servant_object) {\n\n\t\t\t\tXKit.extensions.servant.delete_servant(servant_object.id);\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t},\n\n\t\tsep_100a: {\n\n\t\t\ttext: \"XKit\",\n\t\t\ttype: \"separator\"\n\n\t\t},\n\n\t\tenable_extension: {\n\n\t\t\ttext: \"Enable Extension\",\n\t\t\tcompatibility: \"\",\n\t\t\ttype: \"extension\",\n\t\t\tdescription: \"Enables and runs an extension, if it's disabled\",\n\n\t\t\trun: function(parameter, returns) {\n\n\t\t\t\tsetTimeout(function() {\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\tif (XKit.installed.check(parameter) === true) {\n\t\t\t\t\t\t\tif (XKit.installed.enabled(parameter) === false) {\n\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tif (typeof XKit.extensions[parameter].preferences !== \"undefined\") {\n\t\t\t\t\t\t\t\t\t\tXKit.extensions.xkit_main.load_extension_preferences(parameter);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tXKit.extensions[parameter].run();\n\t\t\t\t\t\t\t\t\tXKit.installed.enable(parameter);\n\t\t\t\t\t\t\t\t\tXKit.notifications.add(\"Enabled '\" + parameter + \"'\", \"ok\");\n\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\tconsole.error(\"Can not run \" + parameter + \": \" + e.message);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\tconsole.error(\"Can't disable \" + parameter + \", \" + e.message);\n\n\t\t\t\t\t}\n\n\n\t\t\t\t}, 1000);\n\n\t\t\t}\n\n\t\t},\n\n\t\tdisable_extension: {\n\n\t\t\ttext: \"Disable Extension\",\n\t\t\tcompatibility: \"\",\n\t\t\ttype: \"extension\",\n\t\t\tdescription: \"Disables and stop an extension, if it's enabled and running. Please note that some extensions might need you to refresh the page to be disabled completely and properly.\",\n\n\t\t\trun: function(parameter, returns) {\n\n\t\t\t\tsetTimeout(function() {\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\tif (XKit.installed.check(parameter) === true) {\n\t\t\t\t\t\t\tif (XKit.installed.enabled(parameter) === true) {\n\t\t\t\t\t\t\t\tXKit.installed.disable(parameter);\n\t\t\t\t\t\t\t\tXKit.extensions[parameter].destroy();\n\t\t\t\t\t\t\t\tXKit.notifications.add(\"Disabled '\" + parameter + \"'\", \"ok\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\tconsole.error(\"Can't disable \" + parameter + \", \" + e.message);\n\n\t\t\t\t\t}\n\n\n\t\t\t\t}, 1000);\n\n\n\t\t\t}\n\n\t\t},\n\n\t\tsep_100: {\n\n\t\t\ttext: \"Miscellaneous\",\n\t\t\ttype: \"separator\"\n\n\t\t},\n\n\t\trun_js: {\n\n\t\t\ttext: \"Run Javascript Code\",\n\t\t\tcompatibility: \"\",\n\t\t\ttype: \"textarea\",\n\t\t\tplaceholder: \"ie: 'alert("%1 happened!");'\",\n\t\t\tdescription: \"Lets you run Javascript Code. JQuery and XKit API is supported.\",\n\n\t\t\trun: function(parameter, returns, to_pass, compatibility) {\n\n\t\t\t\tvar parameter_fixed = parameter;\n\n\t\t\t\tfor (var i = 0; i <= 10; i++) {\n\t\t\t\t\tparameter_fixed = parameter_fixed.replace(\"%\" + (i + 1), returns[i]);\n\t\t\t\t}\n\n\t\t\t\tvar m_post = \"\";\n\n\t\t\t\tfor (var j = 0; j < to_pass.length; j++) {\n\t\t\t\t\tif (compatibility[j] === \"post\") {\n\t\t\t\t\t\tm_post = $(to_pass[j]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (m_post !== \"\" && m_post.length > 0) {\n\t\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\t\tvar post = m_post[0];\n\t\t\t\t}\n\n\t\t\t\teval(parameter_fixed + \"\\n//# sourceURL=xkit/servant/servant\" + (new Date()).getTime() + \".js\");\n\n\t\t\t}\n\n\t\t},\n\n\t\trefresh: {\n\n\t\t\ttext: \"Refresh the page\",\n\t\t\tcompatibility: \"\",\n\t\t\tdescription: \"Reloads the page. Can be useful after disabling/enabling an extension.\",\n\n\t\t\trun: function(parameter, returns) {\n\n\t\t\t\tlocation.reload();\n\n\t\t\t}\n\n\t\t},\n\n\t},\n\n\tload_servants: function() {\n\n\t\tvar servants_load = XKit.storage.get(\"servant\", \"servants\", \"\");\n\n\t\ttry {\n\n\t\t\tXKit.extensions.servant.servants = JSON.parse(servants_load);\n\t\t\tconsole.log(\"Servant loaded \" + XKit.extensions.servant.servants.length + \" servants.\");\n\n\t\t} catch (e) {\n\n\t\t\tXKit.extensions.servant.servants = [];\n\t\t\tXKit.extensions.servant.save_servants();\n\n\t\t}\n\n\t},\n\n\tsave_servants: function() {\n\n\t\tXKit.storage.set(\"servant\", \"servants\", JSON.stringify(XKit.extensions.servant.servants));\n\n\t},\n\n\trun: function() {\n\t\tthis.running = true;\n\n\t\tif ($(\"body\").hasClass(\"xkit-servant-running\")) { console.log(\"Not going to run Servant again, no I won't.\"); return; }\n\n\t\t$(\"body\").addClass(\"xkit-servant-running\");\n\n\t\tXKit.tools.init_css(\"servant\");\n\n\t\tthis.load_servants();\n\t\tthis.run_servants();\n\n\t\t$(document).on(\"click\", \"#glass_overlay\", function() { $(\".xkit-servant-dimmed-but-active\").removeClass(\"xkit-servant-dimmed-but-active\"); });\n\n\t},\n\n\truns_on_posts: [],\n\n\trun_servants: function() {\n\n\t\tvar m_servants = XKit.extensions.servant.servants;\n\n\t\tif (m_servants.length === 0) { return; }\n\n\t\tvar runs_on_posts = [];\n\n\t\tfor (var i = 0; i < m_servants.length; i++) {\n\n\t\t\tvar m_result = XKit.extensions.servant.run_servant(m_servants[i], false);\n\n\t\t\tif (m_result == \"post\") {\n\t\t\t\t// This thing has a runs_on mode, for posts.\n\t\t\t\truns_on_posts.push(m_servants[i]);\n\t\t\t}\n\n\t\t}\n\n\t\tconsole.log(\"- - -- -- - - - -RUNS ON POSTS - -- - - - - -- - - -\");\n\t\tconsole.log(runs_on_posts);\n\n\t\tXKit.extensions.servant.runs_on_posts = [];\n\n\t\tif (runs_on_posts.length > 0) {\n\n\t\t\tXKit.extensions.servant.runs_on_posts = runs_on_posts;\n\t\t\tXKit.post_listener.add(\"servant\", XKit.extensions.servant.do_posts);\n\t\t\tXKit.extensions.servant.do_posts();\n\t\t}\n\n\t},\n\n\tcolor_by_number: function() {\n\t\tif ($(\".servant-post-colorize\").length > 0) {\n\t\t\t$(\".servant-post-colorize\").each(function() {\n\t\t\t\tvar colorArray = [];\n\t\t\t\tvar classList = $(this).attr('class').split(/\\s+/);\n\t\t\t\t$.each(classList, function(index, value) {\n\t\t\t\t\tif (value.search(\"servant-post-color_\") > -1) {\n\t\t\t\t\t\t$.each(value.match(/_([a-zA-Z0-9]){6}/g), function(iIndex, iValue) {\n\t\t\t\t\t\t\tcolorArray.push(iValue);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tfor (var i = 0; i < colorArray.length; i++) {\n\t\t\t\t\tcolorArray[i] = colorArray[i].replace(\"_\", \"\");\n\t\t\t\t}\n\t\t\t\tvar uniques = [...new Set(colorArray)]; //eslint-disable-line no-undef\n\t\t\t\tvar backgroundString = \"\";\n\t\t\t\tfor (var j = 0; j < uniques.length; j++) {\n\t\t\t\t\tbackgroundString += `, #${uniques[j]} ${(100 / uniques.length) * j}%, #${uniques[j]} ${(100 / uniques.length) * (j + 1)}%`;\n\t\t\t\t}\n\t\t\t\t$(this).append(\"
\");\n\t\t\t});\n\t\t}\n\t},\n\n\tdo_posts: function() {\n\n\t\tvar posts = XKit.interface.get_posts(\"xkit-servants-all-done\");\n\n\t\t$(posts).each(function() {\n\n\t\t\tfor (var i = 0; i < XKit.extensions.servant.runs_on_posts.length; i++) {\n\t\t\t\tXKit.extensions.servant.run_servant(XKit.extensions.servant.runs_on_posts[i], true);\n\t\t\t}\n\n\t\t\t$(this).addClass(\"xkit-servant-all-done\");\n\n\t\t});\n\n\t\tXKit.extensions.servant.color_by_number();\n\t},\n\n\trun_servant: function(obj, post_mode) {\n\n\t\tconsole.log(\"Running servant with id \" + obj.id);\n\t\tconsole.log(obj);\n\n\t\t// to-do: check last run time.\n\n\t\tvar causes = obj.causes;\n\t\tvar actions = obj.actions;\n\n\t\tvar returns = [];\n\t\tvar to_pass = [];\n\t\tvar compatibility = [];\n\n\t\tvar do_run = -1;\n\t\tvar has_runs_on = false;\n\t\tvar does_run_on = \"\";\n\n\t\tfor (var i = 0; i < causes.length; i++) {\n\n\t\t\tif (XKit.extensions.servant.causes[causes[i].id].runs_on === \"post\") {\n\t\t\t\thas_runs_on = true;\n\t\t\t\tdoes_run_on = \"post\";\n\t\t\t}\n\n\t\t}\n\n\t\tvar m_object;\n\n\t\tif (has_runs_on === true && does_run_on === \"post\") {\n\n\t\t\tif (!post_mode) {\n\n\t\t\t\t// We will go through these later.\n\t\t\t\tconsole.log(\"Skipping because not in post_mode, and has class post mode.\");\n\t\t\t\treturn \"post\";\n\n\t\t\t} else {\n\n\t\t\t\tm_object = $(\".posts .post\").not(\".xkit-servant-\" + obj.id).not(\"#new_post\").first();\n\t\t\t\tif (m_object.length === 0) { return false; }\n\n\t\t\t}\n\n\t\t}\n\n\t\tcauses.forEach(function(cause) {\n\t\t\tvar to_run = XKit.extensions.servant.causes[cause.id].run;\n\n\t\t\tvar m_result = false;\n\n\t\t\tif (XKit.extensions.servant.causes[cause.id].runs_on === \"post\") {\n\n\t\t\t\tm_result = to_run(cause.value, $(m_object));\n\n\t\t\t} else {\n\n\t\t\t\tm_result = to_run(cause.value);\n\n\t\t\t}\n\n\t\t\t// Save the \"return\", ie: %1, %2..\n\t\t\treturns.push(m_result.return);\n\n\t\t\t// Save the pass, which can be a post object, etc.\n\t\t\tto_pass.push(m_result.pass);\n\n\t\t\t// We should save this too, so we wouldn't, for example,\n\t\t\t// push a post object to a function that doesn't take post objects.\n\t\t\tcompatibility.push(XKit.extensions.servant.causes[cause.id].compatibility);\n\n\t\t\tif (m_result.run === false || do_run === 0) {\n\t\t\t\tdo_run = 0;\n\t\t\t} else {\n\t\t\t\tdo_run = 1;\n\t\t\t}\n\t\t});\n\n\t\t$(m_object).addClass(\"xkit-servant-\" + obj.id);\n\n\t\tif (do_run !== 1) { return; }\n\n\t\tactions.forEach(function(action) {\n\n\t\t\tvar m_result = XKit.extensions.servant.actions[action.id].run(action.value, returns, to_pass, compatibility, obj);\n\n\t\t\tif (XKit.extensions.servant.actions[action.id].stop === true) {\n\n\t\t\t\t// This is a flow thingy, where we must wait for it to return a value\n\t\t\t\t// so we can go on.\n\n\t\t\t\tif (m_result === false) {\n\t\t\t\t\t// We should stop.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t});\n\n\t\treturn \"\";\n\n\t},\n\n\tadd_cause_count: 0,\n\n\tshow_add: function(m_div) {\n\n\t\tvar m_html = \"\";\n\n\t\tXKit.extensions.servant.add_cause_count = 0;\n\t\tXKit.extensions.servant.add_action_count = 0;\n\n\t\t// ---- Causes\n\n\t\tm_html = m_html + \"
Run this servant even when only one of the requirements is met. (OR mode)
\";\n\n\n\t\tm_html = m_html + \"
There is an incompatibility here. For example, you can't create a servant with the job \\\"When the time is 7 PM, block the post\\\": please check the combination and try again. Click Help on bottom right for more information.
\";\n\n\t\tm_html = m_html + \"
Be very careful! The \\\"Run Javascript Code\\\" option is for experts. Do not copy/paste and run code from people you don't know and trust, very bad things can happen.
You need to refresh the page for changes to take affect
\" +\n\t\t\t\t\t\"
\" +\n\t\t\t\t\t\"
\" +\n\t\t\t\t\t\tservant_html +\n\t\t\t\t\t\"
\" +\n\t\t\t\t\"
\";\n\n\n\t\t$(m_div).append(m_html);\n\n\t\t$(\"#servant-add-button\").click(function() {\n\n\t\t\tXKit.extensions.servant.show_add(m_div);\n\n\t\t});\n\n\t\t$(\".xkit-servant-item-delete\").click(function() {\n\n\t\t\tvar m_id = $(this).attr('data-servant-id');\n\t\t\tXKit.extensions.servant.delete_servant(m_id);\n\t\t\t$(this).parent().slideUp('fast', function() {\n\n\t\t\t\t$(this).remove();\n\n\t\t\t\t$(\"#xkit-extensions-panel-right\").nanoScroller();\n\n\t\t\t\tif (XKit.extensions.servant.servants.length === 0) {\n\t\t\t\t\tXKit.extensions.servant.cpanel(XKit.extensions.servant.control_panel_div);\n\t\t\t\t}\n\n\t\t\t\tXKit.extensions.xkit_preferences.restart_extension(\"servant\");\n\n\t\t\t});\n\n\t\t});\n\n\t\t$(\"#xkit-extensions-panel-right\").nanoScroller();\n\t\t$(\"#xkit-extensions-panel-right\").nanoScroller({ scroll: 'top' });\n\n\t},\n\n\tdelete_servant: function(id) {\n\n\t\tXKit.extensions.servant.load_servants();\n\n\t\tfor (var i = 0; i < XKit.extensions.servant.servants.length; i++) {\n\n\t\t\tif (XKit.extensions.servant.servants[i].id === id) {\n\n\t\t\t\tXKit.extensions.servant.servants.splice(i, 1);\n\n\t\t\t}\n\n\t\t}\n\n\t\tXKit.extensions.servant.save_servants();\n\n\t},\n\n\tshow_help: function() {\n\n\t\tXKit.window.show(\"Servant: Introduction\",\n\t\t\t\"This extension allows you to create servants, little code snippets which run when you want them to. \" +\n\t\t\t\"You can also write your own Javascript code!
\" +\n\t\t\t\"Each cause and action has a small "i" icon next to them. Select a cause or action, then hover over the icon to see what they do.\",\n\t\t\t\"info\",\n\t\t\t'
Next →
' +\n\t\t\t'
Back
' +\n\t\t\t'
Close
');\n\n\t\t$(\"#xkit-servant-cancel-tour\").click(function() {\n\t\t\tXKit.extensions.servant.show_add(XKit.extensions.servant.control_panel_div);\n\t\t});\n\n\t\t$(\"#xkit-servant-returns\").click(function() {\n\t\t\tXKit.window.show(\"Servant: What are returns?\",\n\t\t\t\t\"Some causes "return" data. Here's how to use them.
\" +\n\t\t\t\t\"Some servant causes have a symbol, a box with an arrow pointing out. \" +\n\t\t\t\t\"Hovering over them shows what they return. Here's an example: \" +\n\t\t\t\t' ' +\n\t\t\t\t\"This basically means that if you type "%1" on the actions panel, that %1 will get replaced with the time.\",\n\t\t\t\t\"info\",\n\t\t\t\t'
Next →
' +\n\t\t\t\t'
Close
',\n\t\t\ttrue);\n\t\t\t$(\"#xkit-servant-intro\").click(XKit.extensions.servant.show_help);\n\t\t\t$(\"#xkit-servant-js-intro\").click(function() {\n\t\t\t\tXKit.window.show(\"Servant: How to use JavaScript code?\",\n\t\t\t\t\t\"If you are a poweruser, you can also use JavaScript code. This allows you to do things that Servant does not support. \" +\n\t\t\t\t\t'You have access to the XKit API and to jQuery.
' +\n\t\t\t\t\t\"Be careful though, and never copy/paste code from untrustworthy sources! \" +\n\t\t\t\t\t\"You should never use code you didn't review. Do not use obfuscated code.\",\n\t\t\t\t\t\"info\",\n\t\t\t\t\t'
Next →
' +\n\t\t\t\t\t'
Close
',\n\t\t\t\ttrue);\n\t\t\t\t$(\"#xkit-servant-js-causes\").click(function() {\n\t\t\t\t\tXKit.window.show(\"Servant: JavaScript on causes\",\n\t\t\t\t\t\t\"When writing a cause Javascript code, simply return true or false and Servant will do the rest.
\" +\n\t\t\t\t\t\t\"// Check if we should run. \" +\n\t\t\t\t\t\t\"if (XKit.interface.where().inbox === true) { \" +\n\t\t\t\t\t\t\" return true; \" +\n\t\t\t\t\t\t\"} else { \" +\n\t\t\t\t\t\t\" return false; \" +\n\t\t\t\t\t\t\"}
\" +\n\t\t\t\t\t\t'You can also use this to initialise your code, for example to add a control button.',\n\t\t\t\t\t\t\"info\",\n\t\t\t\t\t\t'
Next →
' +\n\t\t\t\t\t\t'
Close
',\n\t\t\t\t\ttrue);\n\t\t\t\t\t$(\"#xkit-servant-js-actions\").click(function() {\n\t\t\t\t\t\tXKit.window.show(\"Servant: JavaScript on actions\",\n\t\t\t\t\t\t\t\"If your servant runs on a post, you can access the post using the variable post.
\" +\n\t\t\t\t\t\t\t\"// Make the said post's background red! \" +\n\t\t\t\t\t\t\t'$(post).css(\"background\",\"red\");
' +\n\t\t\t\t\t\t\t\"You can also use any cause returns:
\" +\n\t\t\t\t\t\t\t'$(post).append(\"I made this red because it contained \\\"%1\\\"!\");
',\n\t\t\t\t\t\t\t\"info\",\n\t\t\t\t\t\t\t'
Got it - add a new servant!
' +\n\t\t\t\t\t\t\t'
Close
',\n\t\t\t\t\t\ttrue);\n\n\t\t\t\t\t\t$(\"#xkit-servant-done\").click(function() {\n\t\t\t\t\t\t\tXKit.extensions.servant.show_add(XKit.extensions.servant.control_panel_div);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t},\n\n\tdestroy: function() {\n\t\tthis.running = false;\n\t}\n\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpGNzdGMTE3NDA3MjA2ODExODA4MzkyMjM2MzU5MTQ4NCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1NTkwODBENDRFNDgxMUUzQTZERkRFMDgxOTFGQ0Q4MSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1NTkwODBEMzRFNDgxMUUzQTZERkRFMDgxOTFGQ0Q4MSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjAxODAxMTc0MDcyMDY4MTFBRTczREVDNEM5OEM0RTE5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkY3N0YxMTc0MDcyMDY4MTE4MDgzOTIyMzYzNTkxNDg0Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+mn9SrQAABKhJREFUeNrsWk2IHEUUfq+qu2d2w6zubIKSgwRj0AUPIiSCZyXoyVMOelDwFs8iqHc9ePEQEE+elJBDSAKBRfDi1V+MgSAYWF3zY0hmnd3Nzkx3PWtmZ2Znuqtrqqqr2WlIMzRD9+tX79X7+97rxhM/dKHKR4BQ7YNVXP7qWyAAIAAcnLPH5HUcUYKWWMMKZnGYXFFPNmkB1NBR5r+Go56AVDydyR7FwDwpcHAaNEJ4ucHX7idVTaOxgA+OsteavKALHZgJaBCpnz7Fb/folza5McHnf/YPJRoBfX4sXOCzrX+8jjWEf2N664/erQ7OiwLNCL5bDbmNPD9t09mb8XbsEsTkXQFE7BAs2ijw4iF8Y4V9fTdxiIG5ONY7sNYS6BLEJeShFMu7PdroKnIFY/BcHSOEhODjjfhBTA7CBGXk0VRtudIS524rfCNkcPFEdDSCr+4l17aFmyTShWgaaZEW0oEBCCOcQn59g6AKosksdYjTrzvw5Z0YjRChQpiA4UwIZRLlUxzY9CNyBYYKVjXE9S58+FdPpAnIYKEyoYSUZpHt840YKleRHv/JP7EsAkVkwFPXdr0rUGPw6hLnA7mkIjd2xfUdUVL6wpd+3zV08zlFoxyqfcg0WjQIQuxDGpskS/djuOMJwXgI4ici/OKYHfK53BKf3Yo9WcBHFhKDpG6bqeZFAYYuCcCbAmhdetOzFqeWiHD2iAVMhjdKLEQ5NRAHq6ZnLQ4K4BDwkXKJ0UJGwxsLOJ3HlGWuS3S53qVktFHLHFam10FQK43DHbGwScALw1GW4dAW9P7fvR0xlONMM3hnhafgKme+gtg3+p/c5jyPRH/jEJmFsLAClGUhy8KYM1cq4AlFemgplQmxS/sWiElnn4N3oawoi4jvHeG9UcI4XmclupCHIM5oEDF4ZYnrdZ6jIEZ7b5ZPeAzioiy4k9d5hBJilAyFXe7p0/fPDrs5KGRCz9Zg9WFDw2YldH0BYHIPQsvtlFHNc5djZsKwcT9QtJfcFnD+QWzlSDe74GukGfDCvviQ4Op/1jNN7i8GKt4T8xI0kO50eNCr7iF36WNtUdbQo1AdaHBsJ6S8/tGTYX1UH9baycVWPHcWOLkQPB7Qt+1EaYEIccw59Ofxahzg8GsGeKbJGKrvsn6Sp8m077aKyS/g6NIQvt0MGwx3BSgf79BUD9BHPqW9zXXJQq8v8Wdr/edeWGDLKueoMQgmQCoWAM8zZ57SAmRDD09H7PQIaa7W2WrdSAg+HOLvTTGA3Iex2fcDinu6aceby4ED5GBT0wR0miQppcI8NEqZIczw/GeXDlv6HQ7bS1KOlYw3O7W5e3cpFcSY82f/fGkzbvLwmdrQJ8jMvwcuhKoeDi27vbRU1v4gUeyFzfjsSvAYx++3kh8fipmDrR0hyvskw6USbyX0TSt5t8m3BN2LySQcy1TAKcNt9MSlTaijt8bqAFrK3zoCYB4UqDqcrrwCXJ2hDWuz5llUlRS3iqv7lFM29dnX9Jh5d4/Gn0uOiSmHAC1f/UP+xwc0DmKNupgjn1JK0GAQV03y7IwjBRTq6qUhAynBco8NKRVyBgyr3db/L8AA9YdwpolZBTYAAAAASUVORK5CYII=","css":"#servant-toolbar {\n\tbackground: rgb(245,245,245);\n\tpadding: 3px 15px;\n\tborder-bottom: 1px solid rgb(190,190,190);\n\tposition: relative;\n}\n\n.xkit-servant-dimmed { opacity: 0.33; }\n.xkit-servant-dimmed.xkit-servant-dimmed-but-active { opacity: 1; }\n\n.xkit-servant-rubber-band {\n\n\tposition: absolute;\n\ttop: 0; left: 0;\n\twidth: 100%; height: 6px;\n\tz-index: 9;\n\tborder-radius: 3px 3px 0px 0px;\n\n}\n\n.post_full .post_permalink { z-index: 10; }\n\n#servant-refresh-warning {\n\tfont-size: 12px;\n\tposition: absolute;\n\ttop: 11px;\n\tright: 20px;\n\tline-height: 20px;\n\theight: 20px;\n\tcolor: rgb(120,120,120);\n\tbackground: no-repeat 0px 50% url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAXUlEQVQYV3XQwQ0AIQgEQGjhquXh0wfV2oIXLlkDi+dPMi6ICh0z2+6uXC+FQGM+MscSxgcCIYlxgwFuqR/MaYBRz6kN5k8UeJstWvOsypDXgtTTmgHuWFNb7N+DF+nsQgtDvJ+YAAAAAElFTkSuQmCC');\n\tpadding-left: 15px;\n}\n\n.xkit-servant-list-item .m-title { font-weight: bold; }\n.xkit-servant-list-item .m-description {\n\n\tcolor: rgb(120,120,120); font-size: 12px;\n\tmax-width: 490px;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\n}\n\n#servant-list-no-servants {\n\n\ttext-align: center;\n\tpadding-top: 42px;\n\tfont-size: 13px;\n\tcolor: rgb(130,130,130);\n\n}\n\n.xkit-servant-list-item:last-child { border-bottom: 0; }\n\n.xkit-servant-list-item {\n\n\theight: 35px;\n\tline-height: 18px;\n\tpadding-left: 27px;\n\tborder-bottom: 1px solid rgb(220,220,220);\n\tfont-size: 13px;\n\tcolor: rgb(80,80,80);\n\tposition: relative;\n\tpadding-top: 10px;\n\tpadding-bottom: 10px;\n\n}\n\n.xkit-servant-item-delete {\n\n\tposition: absolute;\n\tleft: 7px;\n\ttop: 15px;\n\tbackground: no-repeat 50% 50% url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAYAAADEUlfTAAAALElEQVQIW2NkwAMYQXIXOTj+g2j9Hz9Q+GAOsgIYH6QQLonNBMI6CdqJzdEAOZQXyGBIAx8AAAAASUVORK5CYII=');\n\theight: 25px;\n\twidth: 13px;\n\topacity: 0.45;\n\tcursor: pointer;\n\tz-index: 100;\n\n}\n\n.xkit-servant-item-delete:hover { opacity: 0.8; }\n\n.xkit-servant-add-division {\n\n\tposition: relative;\n\tborder-top: 1px solid rgb(200,200,200);\n\tpadding: 5px;\n\tpadding-left: 100px;\n\tmargin-top: 5px;\n\n}\n\n.xkit-servant-silent-division {\n\n\tmargin-top: 5px;\n\tmargin-bottom: 10px;\n\tborder-top: 1px solid rgb(200,200,200);\n\theight: 0;\n\n}\n\n.xkit-servant-help-for-line {\n\n\tposition: absolute;\n\tleft: -25px;\n\tbackground: no-repeat 50% 50% url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAOElEQVQYV2NkwAT/oUKMyFIoHKgE0QqxWMLAgG4izDSQYrxWE60QZBLRbqSeQmT3YQQhss/wKgQA9VMJCzEArKMAAAAASUVORK5CYII=');\n\twidth: 20px;\n\theight: 23px;\n\ttop: 2px;\n\tborder-radius: 3px;\n\topacity: 0.40;\n\tcursor: pointer;\n\n}\n\n.xkit-servant-help-for-line:hover {\n\n\topacity: 0.55;\n\n}\n\n.xkit-servant-add-delete-line {\n\n\tposition: absolute;\n\tleft: -43px;\n\tbackground: red no-repeat 50% 50% url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAYAAADEUlfTAAAAG0lEQVQIW2NkwAMYKZP8DwToJjCCAGXG4tINALm2BAjkSSkMAAAAAElFTkSuQmCC');\n\twidth: 15px;\n\theight: 15px;\n\ttop: 6px;\n\tborder-radius: 60px;\n\topacity: 0.40;\n\tcursor: pointer;\n\n}\n\n.xkit-servant-option-listbox {\n\n\tmargin-top: 0px !important;\n\tmargin-bottom: 0px;\n\theight: 25px;\n\tfont-size: 13px;\n\twidth: 100%;\n\n}\n\n.xkit-servant-add-delete-line:hover {\n\n\topacity: 0.55;\n\n}\n\n.xkit-servant-option-action-line-0 .xkit-servant-add-delete-line,\n.xkit-servant-option-cause-line-0 .xkit-servant-add-delete-line { display: none; }\n\n.xkit-servant-javascript-warning {\n\tbackground: rgb(250,190,190);\n\tpadding: 5px 10px;\n\tborder: 1px solid rgba(0,0,0,0.22);\n\tfont-size: 12px;\n\tborder-radius: 4px;\n\tmargin-top: 11px;\n\tline-height: 17px;\n\tdisplay: none;\n}\n.xkit-servant-compatibility-error {\n\tbackground: rgb(250,190,190);\n\tpadding: 5px 10px;\n\tborder: 1px solid rgba(0,0,0,0.22);\n\tfont-size: 12px;\n\tborder-radius: 4px;\n\tmargin-top: 11px;\n\tline-height: 17px;\n\tdisplay: none;\n}\n\n.xkit-servant-option-textareabox {\n\n\theight: 57px;\n\twidth: 288px;\n\tresize: none;\n\tfont: normal 11px courier, monospace;\n\n}\n\n.xkit-servant-option-line {\n\n\tposition: relative;\n\tmargin-top: 5px;\n\tmin-height: 25px;\n\n}\n\n.xkit-servant-option-line.servant-contains-textarea {\n\n\theight: 74px;\n\n}\n\n.xkit-servant-division-title {\n\n\tposition: absolute;\n\ttop: 12px;\n\tcolor: rgb(100,100,100);\n\tfont-weight: bold;\n\tleft: 0px;\n\n}\n\n.xkit-servant-add-option-settings {\n\n\tposition: absolute;\n\tleft: 161px;\n\ttop: 1px;\n\twidth: 303px;\n\tdisplay: none;\n\theight: 26px;\n\n}\n\n.xkit-servant-add-option-settings.xkit-servant-return-values-shown .xkit-servant-option-textbox {\n\n\tpadding-right: 30px !important;\n\n}\n\n.xkit-servant-add-option-returns {\n\n\ttop: 2px; right: 0px;\n\theight: 23px;\n\twidth: 23px;\n\tbackground: white no-repeat 50% 50% url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAVklEQVQYV2NkQAXGQO4ZIGZEE0cRgClCV2MCFDiLrhPdRDgfwwp044D8/yCnkKQQpAOf2+EmghlIKpH5KG7EptAXqDEdiH2AGO5rfCbCLQJZSciNYMUAyEgTC/zM8RoAAAAASUVORK5CYII=);\n\t/*width: 20px; height: 19px;*/\n\tposition: absolute;\n\t/*top: 4px; right: 1px;*/\n\topacity: 0.45;\n\tcursor: pointer;\n\tdisplay: none;\n\n}\n\n.xkit-servant-option-line.xkit-servant-return-values-shown .xkit-servant-add-option-returns {\n\tdisplay: block;\n}\n\n.xkit-servant-option-line.xkit-servant-return-values-shown .xkit-servant-add-option-settings {\n\twidth: 269px;\n}\n\n.xkit-servant-option-line.xkit-servant-return-values-shown .xkit-servant-add-option {\n\n\twidth: 428px;\n\n}\n\n.xkit-servant-add-option-returns:hover {\n\n\topacity: 0.7;\n\n}\n\n.xkit-servant-add-option-returns:active {\n\n\topacity: 1;\n\ttop: 3px;\n\theight: 22px;\n\n}\n\n.xkit-servant-option-textbox {\n\n\tmargin-top: 0px !important;\n\tmargin-bottom: 0px;\n\theight: 25px;\n\tfont-size: 13px;\n\twidth: 153px;\n\n}\n\n.xkit-servant-add-option-settings.xkit-servant-options-shown {\n\n\tdisplay: block;\n\n}\n\n.xkit-servant-add-option {\n\n\tposition: absolute;\n\ttop: 1px;\n\tleft: 1px;\n\twidth: 464px;\n\theight: 25px;\n\n}\n\n.xkit-servant-add-option.xkit-servant-half-option {\n\n\twidth: 153px !important;\n\n}\n\n.xkit-servant-add-more {\n\n\tbackground: no-repeat 5px 50% url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAJElEQVQIW2NkQID/QCYjjAtnAAUwJEAC6IARrw6Yapx2oBgHAMKOBQfOt/0mAAAAAElFTkSuQmCC');\n\tpadding: 1px 10px 1px 14px;\n\tcolor: black;\n\tfont-size: 12px;\n\tcursor: pointer;\n\topacity: 0.54;\n\tdisplay: inline-block;\n\tmargin-top: 6px;\n\n}\n\n.xkit-servant-add-more:hover {\n\n\topacity: 0.77;\n\n}\n","title":"Servant","description":"XKit Personal Assistant","developer":"new-xkit","version":"0.6.1","details":"Automator for XKit: lets you create little Servants that does tasks for you when the conditions you've set are met.","frame":"false","beta":"false","slow":"true"}
\ No newline at end of file
diff --git a/Extensions/dist/shorten_posts.json b/Extensions/dist/shorten_posts.json
new file mode 100644
index 000000000..39ed1c3c8
--- /dev/null
+++ b/Extensions/dist/shorten_posts.json
@@ -0,0 +1 @@
+{"id":"shorten_posts","script":"//* TITLE Shorten Posts **//\n//* VERSION 0.2.4 **//\n//* DESCRIPTION Makes scrolling easier **//\n//* DETAILS This extension shortens long posts, so if you are interested, you can just click on Show Full Post button to see it all, or scroll down if you are not interested. Useful for screens where long posts take a lot of space, and making it hard to scroll down.
By default, this extension shortens text posts. You can toggle settings to choose which types of posts to shorten. (This will 'cut off' long, vertical posts.) **//\n//* DEVELOPER STUDIOXENIX **//\n//* FRAME false **//\n//* BETA false **//\n//* SLOW true **//\n\nXKit.extensions.shorten_posts = new Object({\n\n\trunning: false,\n\tslow: true,\n\n\theight_min: 200,\n\theight_max: 1500,\n\theight_default: 350,\n\n\tpreferences: {\n\t\tsep0: {\n\t\t\ttext: \"When to shorten posts\",\n\t\t\ttype: \"separator\"\n\t\t},\n\t\ttext_too: {\n\t\t\ttext: \"Check and shorten text posts\",\n\t\t\tdefault: true,\n\t\t\tvalue: true\n\t\t},\n\t\tphotos_too: {\n\t\t\ttext: \"Check and shorten photo posts and photosets\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t},\n\t\taudio_too: {\n\t\t\ttext: \"Check and shorten audio posts\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t},\n\t\tasks_too: {\n\t\t\ttext: \"Check and shorten replies to asks\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t},\n\t\tvideos_too: {\n\t\t\ttext: \"Check and shorten video posts\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t},\n\t\tchat_too: {\n\t\t\ttext: \"Check and shorten chat posts\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t},\n\t\tlinks_too: {\n\t\t\ttext: \"Check and shorten link posts\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t},\n\t\tquotes_too: {\n\t\t\ttext: \"Check and shorten quote posts\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t},\n\t\theight: {\n\t\t\ttext: \"Maximum post height (what is this?)\",\n\t\t\ttype: \"text\",\n\t\t\tdefault: \"350\",\n\t\t\tvalue: \"350\"\n\t\t},\n\t\tsep1: {\n\t\t\ttext: \"Appearance and behaviour options\",\n\t\t\ttype: \"separator\"\n\t\t},\n\t\tdisplay_tags: {\n\t\t\ttext: \"Display the tags on shortened posts\",\n\t\t\tdefault: true,\n\t\t\tvalue: true\n\t\t},\n\t\tembiggen_on_click: {\n\t\t\ttext: \"Embiggen photo posts when I click on the thumbnail\",\n\t\t\tdefault: true,\n\t\t\tvalue: true\n\t\t}\n\t},\n\n\trun: function() {\n\n\t\tthis.running = true;\n\t\tXKit.extensions.shorten_posts.cpanel_check_height();\n\n\t\tif ($(\".posts .post\").length > 0) {\n\t\t\tXKit.tools.init_css(\"shorten_posts\");\n\t\t\t$(document).on(\"click\", \".xkit-shorten-posts-embiggen\", XKit.extensions.shorten_posts.embiggen);\n\t\t\tXKit.post_listener.add(\"shorten_posts\", XKit.extensions.shorten_posts.check);\n\t\t\tXKit.extensions.shorten_posts.check();\n\t\t}\n\n\t},\n\n\tcheck: function() {\n\n\t\tvar shortened_count = 0;\n\n\t\t$(\".posts .post\").not(\".xkit-shorten-posts-done\").not(\".xkit-shorten-posts-embiggened\").each(function() {\n\n\t\t\tvar m_height = $(this).height();\n\t\t\t$(this).addClass(\"xkit-shorten-posts-done\");\n\n\t\t\tif ($(this).hasClass(\"xblacklist_blacklisted_post\")) { return; }\n\n\t\t\tvar dont_return = false;\n\t\t\tif (XKit.extensions.shorten_posts.preferences.text_too.value\n\t\t\t\t&& $(this).hasClass(\"is_regular\")) {\n\t\t\t\tdont_return = true;\n\t\t\t}\n\t\t\tif (XKit.extensions.shorten_posts.preferences.photos_too.value\n\t\t\t\t&& ($(this).hasClass(\"is_photo\") || $(this).hasClass(\"is_photoset\"))) {\n\t\t\t\tdont_return = true;\n\t\t\t}\n\t\t\tif (XKit.extensions.shorten_posts.preferences.audio_too.value\n\t\t\t\t&& $(this).hasClass(\"is_audio\")) {\n\t\t\t\tdont_return = true;\n\t\t\t}\n\t\t\tif (XKit.extensions.shorten_posts.preferences.links_too.value\n\t\t\t\t&& $(this).hasClass(\"is_link\")) {\n\t\t\t\tdont_return = true;\n\t\t\t}\n\t\t\tif (XKit.extensions.shorten_posts.preferences.chat_too.value\n\t\t\t\t&& $(this).hasClass(\"is_conversation\")) {\n\t\t\t\tdont_return = true;\n\t\t\t}\n\t\t\tif (XKit.extensions.shorten_posts.preferences.quotes_too.value\n\t\t\t\t&& $(this).hasClass(\"is_quote\")) {\n\t\t\t\tdont_return = true;\n\t\t\t}\n\t\t\tif (XKit.extensions.shorten_posts.preferences.asks_too.value\n\t\t\t\t&& $(this).hasClass(\"is_note\")) {\n\t\t\t\tdont_return = true;\n\t\t\t}\n\t\t\tif (XKit.extensions.shorten_posts.preferences.videos_too.value\n\t\t\t\t&& $(this).hasClass(\"is_video\")) {\n\t\t\t\tdont_return = true;\n\t\t\t}\n\n\t\t\tif (!dont_return) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (m_height >= XKit.extensions.shorten_posts.preferences.height.value) {\n\t\t\t\tXKit.extensions.shorten_posts.short($(this), m_height);\n\t\t\t\tshortened_count++;\n\t\t\t}\n\n\t\t});\n\n\t\tif (shortened_count > 0) {\n\n\t\t\t// Call Tumblr scroll helper update thingy.\n\t\t\tXKit.tools.add_function(function() {\n\t\t\t\tTumblr.Events.trigger(\"DOMEventor:updateRect\");\n\t\t\t}, true, \"\");\n\n\t\t}\n\n\t},\n\n\tembiggen: function(e) {\n\n\t\tvar obj = e.target;\n\n\t\tif ($(obj).hasClass(\"image_thumbnail\") === true) {\n\t\t\tobj = $(obj).parentsUntil(\".post\").parent().find(\".xkit-shorten-posts-embiggen\");\n\t\t}\n\n\t\tvar m_height = $(obj).attr('data-old-height');\n\t\tvar post_div = $(obj).parent();\n\n\t\tvar m_speed = 200 + (m_height / 2);\n\n\t\tif (m_height < 320) {\n\t\t\tm_speed = 120;\n\t\t}\n\n\t\t$(post_div).animate({\n\t\t\theight: m_height\n\t\t}, m_speed, function() {\n\t\t\t$(this).find(\".xkit-shorten-posts-embiggen\").slideUp('fast');\n\t\t\t$(this).removeClass(\"xkit-shorten-posts-shortened\");\n\t\t\t$(this).removeClass(\"xkit-shorten-posts-shortened-show-tags\");\n\t\t\t$(this).addClass(\"xkit-shorten-posts-embiggened\");\n\t\t\t$(this).css('height', 'auto');\n\t\t});\n\n\t},\n\n\tshort: function(obj, m_height) {\n\n\t\tif ($(obj).hasClass(\"xblacklist_blacklisted_post\")) { $(obj).removeClass(\"xkit-shorten-posts-shortened-show-tags\"); return; }\n\n\t\tvar post_id = $(obj).attr('data-post-id');\n\t\t$(obj).attr('data-old-height', m_height);\n\t\t$(obj).css('height', XKit.extensions.shorten_posts.preferences.height.value + \"px\");\n\t\t$(obj).addClass(\"xkit-shorten-posts-shortened\");\n\n\t\t$(obj).append(\"
This post has been shortened. Click here to show the full post
\");\n\n\t\tif (XKit.extensions.shorten_posts.preferences.display_tags.value === true) {\n\t\t\t$(obj).addClass(\"xkit-shorten-posts-shortened-show-tags\");\n\t\t}\n\n\t\tif (XKit.extensions.shorten_posts.preferences.embiggen_on_click.value === true) {\n\t\t\t$(obj).find(\".image_thumbnail\").on(\"click\", XKit.extensions.shorten_posts.embiggen);\n\t\t}\n\n\t},\n\n\tdestroy: function() {\n\n\t\tthis.running = false;\n\n\t\t// Remove all the stuff we've added.\n\t\t$(\".xkit-shorten-posts-embiggen\").remove();\n\n\t\t$(\".post.xkit-shorten-posts-shortened\").each(function() {\n\t\t\t$(this).css('height', 'auto');\n\t\t});\n\n\t\t$(\".xkit-shorten-posts-embiggen\").off(\"click\", XKit.extensions.shorten_posts.embiggen);\n\n\t\t$(\".post\").removeClass(\"xkit-shorten-posts-shortened\");\n\t\t$(\".post\").removeClass(\"xkit-shorten-posts-embiggened\");\n\t\t$(\".post\").removeClass(\"xkit-shorten-posts-shortened-show-tags\");\n\t\t$(\".post\").removeClass(\"xkit-shorten-posts-done\");\n\n\t\tXKit.tools.remove_css(\"shorten_posts\");\n\n\t\t// Call Tumblr scroll helper update thingy.\n\t\tXKit.tools.add_function(function() {\n\t\t\tTumblr.Events.trigger(\"DOMEventor:updateRect\");\n\t\t}, true, \"\");\n\n\t},\n\n\tcpanel_check_height: function() {\n\n\t\tif (isNaN(XKit.extensions.shorten_posts.preferences.height.value) === true) {\n\t\t\tconsole.log(\"Invalid post height check interval, reverting to default: not a number.\");\n\t\t\tXKit.extensions.shorten_posts.preferences.height.value = XKit.extensions.shorten_posts.height_default;\n\t\t} else {\n\t\t\tvar m_height = XKit.extensions.shorten_posts.preferences.height.value;\n\t\t\tif (m_height > XKit.extensions.shorten_posts.height_max || m_height < XKit.extensions.shorten_posts.height_min) {\n\t\t\t\tXKit.extensions.shorten_posts.preferences.height.value = XKit.extensions.shorten_posts.height_default;\n\t\t\t\tconsole.log(\"Invalid post height check interval, reverting to default: too small or big.\");\n\t\t\t}\n\t\t}\n\n\t},\n\n\tcpanel: function(div) {\n\n\t\t$(\"#xkit-shorten-posts-height-help\").click(function() {\n\n\t\t\tXKit.window.show(\"Maximum post height\", \"XKit will shorten posts longer than the height entered here.
The minimum value you can enter is 200, and the maximum is \" + XKit.extensions.shorten_posts.height_max + \". If you enter a value bigger or smaller than these, XKit will return to it's default value, which is 350 pixels.\", \"info\", \"
OK
\");\n\n\t\t});\n\n\t}\n\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NENCNERBRkJEMTQ1MTFFMkIzMzlFNEI5QzIwNDI2MDAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NENCNERBRkNEMTQ1MTFFMkIzMzlFNEI5QzIwNDI2MDAiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0Q0I0REFGOUQxNDUxMUUyQjMzOUU0QjlDMjA0MjYwMCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0Q0I0REFGQUQxNDUxMUUyQjMzOUU0QjlDMjA0MjYwMCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgyxgMQAAAaESURBVHjafFZbbJRF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","css":".xkit-shorten-posts-shortened .post_wrapper {\n\toverflow: hidden;\n\theight: 100%;\n}\n\n.xkit-shorten-posts-embiggen {\n\tposition: absolute;\n\tbottom: 0; left: 0;\n\twidth: 100%;\n\theight: 30px;\n\tline-height: 30px;\n\tbackground: rgb(230,230,230);\n\tbox-shadow: inset 0px 1px 2px rgba(0,0,0,0.22);\n\ttext-align: center;\n\tfont-size: 11px;\n\tfont-weight: bold;\n\ttext-shadow: 0px 1px 0px white;\n\tcolor: rgb(120,120,120);\n\tcursor: pointer;\n\tborder-radius: 0px 0px 5px 5px;\n\tborder-top: 1px solid rgba(0,0,0,0.33);\n\tz-index: 79;\n}\n\n.xkit-shorten-posts-embiggen:hover {\n\tbackground: rgb(245,245,245);\n\tcolor: rgb(100,100,100);\n}\n\n.xkit-shorten-posts-shortened-show-tags .post_tags {\n\tposition: absolute;\n\tbottom: 30px;\n\tleft: 0px;\n\twidth: 100%;\n\tpadding: 10px 20px;\n\tbackground: rgba(255,255,255,0.95);\n\tborder-top: 1px solid rgba(0,0,0,0.22);\n\tmargin-left: 0;\n}\n","title":"Shorten Posts","description":"Makes scrolling easier","developer":"STUDIOXENIX","version":"0.2.4","details":"This extension shortens long posts, so if you are interested, you can just click on Show Full Post button to see it all, or scroll down if you are not interested. Useful for screens where long posts take a lot of space, and making it hard to scroll down.
By default, this extension shortens text posts. You can toggle settings to choose which types of posts to shorten. (This will 'cut off' long, vertical posts.)","frame":"false","beta":"false","slow":"true"}
\ No newline at end of file
diff --git a/Extensions/dist/show_more.json b/Extensions/dist/show_more.json
new file mode 100644
index 000000000..5c3f80dcb
--- /dev/null
+++ b/Extensions/dist/show_more.json
@@ -0,0 +1 @@
+{"id":"show_more","script":"//* TITLE User Menus+ **//\n//* VERSION 2.5.8 **//\n//* DESCRIPTION More options on the user menu **//\n//* DEVELOPER new-xkit **//\n//* DETAILS This extension adds additional options to the user menu (the one that appears under user avatars on your dashboard), such as Avatar Magnifier, links to their Liked Posts page if they have them enabled. Note that this extension, especially the Show Likes and Show Submit options use a lot of network and might slow your computer down. **//\n//* FRAME false **//\n//* BETA false **//\n//* SLOW true **//\n\nXKit.extensions.show_more = new Object({\n\n\trunning: false,\n\tslow: true,\n\n\tlikes_available: {},\n\tsubmit_available: {},\n\tanon_available: {},\n\n\tpreferences: {\n\t\t\"sep0\": {\n\t\t\ttext: \"XKit Classic User Menu\",\n\t\t\ttype: \"separator\",\n\t\t},\n\t\t\"use_classic_menu\": {\n\t\t\ttext: \"Enable XKit's Classic User Menu\",\n\t\t\tdefault: false,\n\t\t\tvalue: false,\n\t\t\texperimental: true\n\t\t},\n\t\t\"sep1\": {\n\t\t\ttext: \"User Menu Options\",\n\t\t\ttype: \"separator\",\n\t\t},\n\t\t\"show_magnetizer\": {\n\t\t\ttext: \"Show Magnifier button to see a bigger version of their avatars\",\n\t\t\tdefault: true,\n\t\t\tvalue: true\n\t\t},\n\t\t\"show_archive\": {\n\t\t\ttext: \"Show a link to the user's archive\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t},\n\t\t\"show_likes\": {\n\t\t\ttext: \"Show Likes button if user is sharing their liked posts\",\n\t\t\tdefault: true,\n\t\t\tvalue: true\n\t\t},\n\t\t\"show_submits\": {\n\t\t\ttext: \"Show Submit button if user has their submit box enabled\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t}\n\t},\n\n\tinit_inbox_asks: function() {\n\n\t\tvar askbox_template = XKit.storage.get(\"show_more\", \"inbox_ask_template\", \"\");\n\t\tif (askbox_template === \"\") {\n\t\t\treturn;\n\t\t}\n\n\t\t$(\"body\").append(askbox_template);\n\t},\n\n\trun: function() {\n\n\t\tthis.running = true;\n\t\tXKit.tools.init_css(\"show_more\");\n\t\tXKit.post_listener.add(\"show_more\", XKit.extensions.show_more.do_posts);\n\t\tXKit.extensions.show_more.do_posts();\n\n\t\tif (document.location.href.indexOf('www.tumblr.com/follow/') != -1)\n\t\t\treturn;\n\n\t\tif (XKit.interface.where().inbox) {\n\t\t\tXKit.extensions.show_more.init_inbox_asks();\n\t\t} else {\n\t\t\tif ($(\"#dashboard_ask_template\").length > 0) {\n\t\t\t\tXKit.storage.set(\"show_more\", \"inbox_ask_template\", $(\"#dashboard_ask_template\")[0].outerHTML);\n\t\t\t}\n\t\t}\n\n\t\tif (this.preferences.use_classic_menu.value) {\n\n\t\t\tXKit.tools.add_css(\".tumblelog_popover_v1, .tumblelog_popover_v2, .tumblelog_popover { display: none !important; }\", \"show_more_classic_menu\");\n\t\t\t$(document).on('mouseover', '.post_avatar .post_avatar_link', XKit.extensions.show_more.enable_classic_menu);\n\n\t\t\t$(document).scroll(function() {\n\n\t\t\t\tif ($(\".xkit-classic-menu-opener.opened\").length > 0) {\n\n\t\t\t\t\tvar m_parent = XKit.extensions.show_more.classic_popup_last_object;\n\t\t\t\t\tvar m_top = $(m_parent).find(\".xkit-classic-menu-opener\").offset().top + 30;\n\n\t\t\t\t\tif ($(\"#xkit-classic-user-menu\").css(\"top\") !== m_top + \"px\") {\n\t\t\t\t\t\t$(\"#xkit-classic-user-menu\").css(\"top\", m_top + \"px\");\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t}\n\n\t\t$(document).on('mouseover', 'a', XKit.extensions.show_more.store_data_username_if_userlink);\n\t\t$(document).on('mouseover', '.post_info_fence a, .post_info a, a.username', XKit.extensions.show_more.store_data_username);\n\t\t$(document).on('mouseover', '.post_avatar_link', XKit.extensions.show_more.store_data_avatar);\n\t\t$(document).on('click mouseover', '.tumblelog_popover .info_popover_button', XKit.extensions.show_more.add_links_new);\n\t\t$(document).on('click', '#xkit-classic-user-menu .xkit-ask', XKit.extensions.show_more.intercept_classic_menu_ask);\n\n\t},\n\n\tpopup_data: \"\",\n\tpopup_data_req_id: 0,\n\tclassic_popup_last_object: \"\",\n\n\thide_classic_menu: function() {\n\n\t\t$(\"#xkit-classic-user-menu-glass\").remove();\n\t\t$(\".xkit-classic-menu-opener\").removeClass(\"opened\");\n\t\t$(\"#xkit-classic-user-menu\").fadeOut('fast', function() { $(this).remove(); });\n\n\t},\n\n\tshow_classic_menu: function(event) {\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tvar m_obj = $(event.target);\n\n\t\tif (typeof XKit.extensions.show_more.popup_data.avatar_url === \"undefined\") {\n\t\t\treturn;\n\t\t}\n\n\t\tvar avatar_url = XKit.extensions.show_more.popup_data.avatar_url;\n\t\tvar user_url = XKit.extensions.show_more.popup_data.name;\n\n\t\tvar m_parent = $(m_obj).parentsUntil('.post').parent();\n\t\tXKit.extensions.show_more.classic_popup_last_object = m_parent;\n\n\t\t$(\"#xkit-classic-user-menu\").remove();\n\t\t$(\"#xkit-classic-user-menu-glass\").remove();\n\n\t\tvar m_html = \"
'));\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t$(this).addClass('xkit-show-picture-size');\n\t\t});\n\t}\n});\n","file":"found","server":"up","errors":false,"css":".xkit-show-picture-size .post_media { position: relative; }\n\n.xkit-show-picture-size .photoset .photoset_photo { position: relative; }\n\n.xkit-show-picture-size .post_media_photo_anchor img { display: block; }\n\n.xkit-show-picture-size .show-picture-size {\n position: absolute;\n top: 0;\n right: 0;\n background: rgba(0,0,0,.5);\n color: #eee;\n padding: 2px 4px;\n z-index: 10;\n}\n\n.xkit-show-picture-size .post_media:hover > .show-picture-size,\n.xkit-show-picture-size .photoset .photoset_photo:hover .show-picture-size {\n display: none;\n}\n\n.photoset_row {\n\tposition: relative;\n}\n","title":"Show Picture Size","description":"Shows the resolution of media post pictures in the upper right corner of the picture","developer":"TiMESPLiNTER","version":"1.0.3","frame":"false","beta":"false","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/shuffle_queue.json b/Extensions/dist/shuffle_queue.json
new file mode 100644
index 000000000..dd6af6310
--- /dev/null
+++ b/Extensions/dist/shuffle_queue.json
@@ -0,0 +1 @@
+{"id":"shuffle_queue","script":"//* TITLE Enhanced Queue **//\n//* VERSION 2.2.1 **//\n//* DESCRIPTION Additions to the Queue page. **//\n//* DEVELOPER STUDIOXENIX **//\n//* DETAILS Go to your queue and click on the Shuffle button on the sidebar to shuffle the posts. Note that only the posts you see will be shuffled. If you have more than 15 posts on your queue, scroll down and load more posts in order to shuffle them too. Or click on Shrink Posts button to quickly rearrange them. **//\n//* FRAME false **//\n//* BETA false **//\n\nXKit.extensions.shuffle_queue = new Object({\n\n\trunning: false,\n\n\trun: function() {\n\n\t\tif (!XKit.interface.where().queue) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.running = true;\n\n\t\tXKit.interface.sidebar.add({\n\t\t\tid: \"queue_plus_sidebar\",\n\t\t\ttitle: \"Queue+\",\n\t\t\titems: [\n\t\t\t\t{ id: \"xshufflequeue_button\", text: \"Shuffle Queue\" },\n\t\t\t\t{ id: \"xdeletequeue_button\", text: \"Clear Queue\" },\n\t\t\t\t{ id: \"xshrinkposts_button\", text: \"Shrink Posts\", count: \"off\" },\n\t\t\t\t{ id: \"xqueueoptions_button\", text: \"Queue Options\", count: \"on\" }\n\t\t\t]\n\t\t});\n\n\t\t$(\"#xshufflequeue_button\").click(() => this.shuffle());\n\t\t$(\"#xdeletequeue_button\").click(() => this.clear());\n\t\t$(\"#xshrinkposts_button\").click(function() {\n\t\t\tif (XKit.installed.is_running(\"shorten_posts\")) {\n\t\t\t\tXKit.window.show(\n\t\t\t\t\t\"Unable to turn on Shrink Posts\",\n\t\t\t\t\t\"Using the Shrink Posts option and Shorten Posts together creates a small mess that no one really wants to see. \" +\n\t\t\t\t\t\"If you still want to use the Shrink Posts functionality of Enhanced Queue, disable the Shorten Posts extension first.\",\n\n\t\t\t\t\t\"error\",\n\n\t\t\t\t\t'
OK
'\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tlet $button = $(this).toggleClass(\"xkit-queue-option-button-on\");\n\t\t\t\tif ($button.hasClass(\"xkit-queue-option-button-on\")) {\n\t\t\t\t\t$button.find(\".count\").html(\"on\");\n\t\t\t\t\tXKit.storage.set(\"shuffle_queue\", \"shrink_posts\", \"true\");\n\t\t\t\t\tXKit.tools.add_css(\n\t\t\t\t\t\t\".post_header { display: none; }\" +\n\t\t\t\t\t\t\".post .post_content_inner, .post .post_media { height: 70px !important; overflow: hidden !important; }\" +\n\t\t\t\t\t\t\".post .post_content { pointer-events: none !important; height: 70px !important; overflow: hidden !important; border: 1px dashed rgb(200,200,200); }\",\n\n\t\t\t\t\t\t\"shuffle_queue_mini_posts\"\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\t$button.find(\".count\").html(\"off\");\n\t\t\t\t\tXKit.storage.set(\"shuffle_queue\", \"shrink_posts\", \"false\");\n\t\t\t\t\tXKit.tools.remove_css(\"shuffle_queue_mini_posts\");\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t$(\"#xqueueoptions_button\").click(function() {\n\t\t\tlet $button = $(this).toggleClass(\"xkit-queue-option-button-on\");\n\n\t\t\tif ($button.hasClass(\"xkit-queue-option-button-on\")) {\n\t\t\t\t$button.find(\".count\").html(\"off\");\n\t\t\t\tXKit.storage.set(\"shuffle_queue\", \"hide_options\", \"true\");\n\t\t\t\tXKit.tools.add_css(\" .dashboard_options_form { display: none; }\", \"shuffle_queue_hide_options\");\n\t\t\t} else {\n\t\t\t\t$button.find(\".count\").html(\"on\");\n\t\t\t\tXKit.storage.set(\"shuffle_queue\", \"hide_options\", \"false\");\n\t\t\t\tXKit.tools.remove_css(\"shuffle_queue_hide_options\");\n\t\t\t}\n\t\t});\n\n\t\tvar shrink_posts = XKit.storage.get(\"shuffle_queue\", \"shrink_posts\", \"false\");\n\t\tif (shrink_posts === \"true\" || shrink_posts === true) {\n\t\t\t$(\"#xshrinkposts_button\").click();\n\t\t}\n\n\t\tvar hide_options = XKit.storage.get(\"shuffle_queue\", \"hide_options\", \"false\");\n\t\tif (hide_options === \"true\" || hide_options === true) {\n\t\t\t$(\"#xqueueoptions_button\").click();\n\t\t}\n\n\t},\n\n\tshuffle: function() {\n\n\t\tXKit.window.show(\n\t\t\t\"Shuffle Queue\",\n\t\t\t\"Would you like to shuffle your queue? \" +\n\t\t\t\"Please note that only loaded posts can be shuffled. \" +\n\t\t\t\"To shuffle your entire queue, scroll down until your whole queue is loaded.\",\n\n\t\t\t\"question\",\n\n\t\t\t'
Shuffle!
' +\n\t\t\t'
Cancel
'\n\t\t);\n\n\t\t$(\"#xshufflequeue_confirm\").click(() => {\n\t\t\tif ($(\"#xshufflequeue_confirm\").hasClass(\"disabled\")) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$(\"#xshufflequeue_confirm\")\n\t\t\t\t.addClass(\"disabled\")\n\t\t\t\t.text(\"Shuffling...\");\n\n\t\t\tlet postIDs = [];\n\t\t\t$(\"#posts [data-pageable]\").each(function() {\n\t\t\t\tlet [ /* \"post\" */, postID] = $(this).attr(\"data-pageable\").split(\"_\");\n\t\t\t\tpostIDs.push(postID);\n\t\t\t});\n\n\t\t\tif (postIDs.length === 0) {\n\t\t\t\tXKit.window.close();\n\t\t\t\tXKit.notifications.add(\"Didn't find any posts to shuffle!\", \"error\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// https://stackoverflow.com/a/12646864\n\t\t\tfor (let i = postIDs.length - 1; i > 0; i--) {\n\t\t\t\tconst j = Math.floor(Math.random() * (i + 1));\n\t\t\t\t[postIDs[i], postIDs[j]] = [postIDs[j], postIDs[i]];\n\t\t\t}\n\n\t\t\tlet blogname = XKit.interface.where().user_url;\n\n\t\t\tXKit.tools.Nx_XHR({\n\t\t\t\tmethod: \"POST\",\n\t\t\t\turl: `https://www.tumblr.com/blog/${blogname}/order_post_queue`,\n\t\t\t\theaders: { \"Content-Type\": \"application/x-www-form-urlencoded; charset=UTF-8\" },\n\t\t\t\tdata: $.param({\n\t\t\t\t\t\"form_key\": XKit.interface.form_key(),\n\t\t\t\t\t\"post_ids\": postIDs.join(\",\")\n\t\t\t\t}),\n\t\t\t\tonload: response => {\n\t\t\t\t\tpostIDs.reverse().forEach(postID => {\n\t\t\t\t\t\t$(\"#new_post_buttons\").after($(`[data-pageable=\"post_${postID}\"]`));\n\t\t\t\t\t});\n\t\t\t\t\tXKit.window.close();\n\t\t\t\t\tXKit.notifications.add(`Shuffled ${postIDs.length} posts!`, \"ok\");\n\t\t\t\t},\n\t\t\t\tonerror: response => {\n\t\t\t\t\tXKit.window.show(\n\t\t\t\t\t\t\"Unable to save queue.\",\n\t\t\t\t\t\t`Something went wrong: HTTP ${response.status}. Please try again later.`,\n\n\t\t\t\t\t\t\"error\",\n\n\t\t\t\t\t\t'
OK
'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t},\n\n\tposts_to_delete: [],\n\tposts_to_delete_count: 0,\n\n\tclear: function() {\n\n\t\tXKit.window.show(\n\t\t\t\"Clear Queue?\",\n\t\t\t\"Delete all the posts in your queue?\",\n\n\t\t\t\"question\",\n\n\t\t\t'
'\n\t\t);\n\n\t\t$(\"#xkit-queue-refresh\").click(() => location.reload(true));\n\t},\n\n\tclear_error: (message, status) => XKit.window.show(\n\t\t\t\"Unable to clear queue.\",\n\n\t\t\t`${message} \n\t\t\tThe server responded with HTTP ${status}. \n\t\t\tPlease try again later, or file a bug report if this keeps occurring.`,\n\n\t\t\t\"error\",\n\n\t\t\t'
OK
' +\n\t\t\t'New XKit support'\n\t),\n\n\tdestroy: function() {\n\t\tXKit.tools.remove_css(\"shuffle_queue_mini_posts\");\n\t\tXKit.tools.remove_css(\"shuffle_queue_hide_options\");\n\t\tXKit.interface.sidebar.remove(\"queue_plus_sidebar\");\n\t\tthis.running = false;\n\t}\n\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpGNzdGMTE3NDA3MjA2ODExODA4MzkyMjM2MzU5MTQ4NCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo2Q0Y3QkY5NTgyMDYxMUUzQjI4QzgxNzhBMDBERDcwMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2Q0Y3QkY5NDgyMDYxMUUzQjI4QzgxNzhBMDBERDcwMCIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjAyODAxMTc0MDcyMDY4MTE4QkRBRjU5ODYxRUUyRjREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkY3N0YxMTc0MDcyMDY4MTE4MDgzOTIyMzYzNTkxNDg0Ii8+IDwvcmRmOkRlc2NyaXB0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","title":"Enhanced Queue","description":"Additions to the Queue page.","developer":"STUDIOXENIX","version":"2.2.1","details":"Go to your queue and click on the Shuffle button on the sidebar to shuffle the posts. Note that only the posts you see will be shuffled. If you have more than 15 posts on your queue, scroll down and load more posts in order to shuffle them too. Or click on Shrink Posts button to quickly rearrange them.","frame":"false","beta":"false","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/stats.json b/Extensions/dist/stats.json
new file mode 100644
index 000000000..61e3ad2ef
--- /dev/null
+++ b/Extensions/dist/stats.json
@@ -0,0 +1 @@
+{"id":"stats","script":"//* TITLE XStats **//\n//* VERSION 0.3.8 **//\n//* DESCRIPTION The XKit Statistics Tool **//\n//* DETAILS This extension allows you to view statistics regarding your dashboard, such as the percentage of post types, top 4 posters, and more. In the future, it will allow you to view statistics regarding your and others blogs. **//\n//* DEVELOPER STUDIOXENIX **//\n//* FRAME false **//\n//* BETA false **//\n\nXKit.extensions.stats = new Object({\n\n\trunning: false,\n\n\tapiKey: XKit.api_key,\n\n\tpreferences: {\n\t\t\"promote\": {\n\t\t\ttext: \"Help promote XKit: Add 'Posted using XKit' on the bottom of published results\",\n\t\t\tdefault: true,\n\t\t\tvalue: true\n\t\t}\n\t},\n\n\trun: function() {\n\t\tthis.running = true;\n\n\t\tif (XKit.interface.where().dashboard === false && XKit.interface.where().channel === false) { return; }\n\n\t\tXKit.tools.init_css(\"stats\");\n\n\t\tXKit.interface.sidebar.add({\n\t\t\tid: \"xstats_sidebar\",\n\t\t\ttitle: \"XStats\",\n\t\t\titems: [\n\t\t\t\t{ id: \"xstats_dashboard_stats\", text: \"Dashboard Stats\" },\n\t\t\t\t{ id: \"xstats_blog_stats\", text: \"Blog Stats\" }\n\t\t\t]\n\t\t});\n\n\t\t$(\"#xstats_dashboard_stats\").click(function() {\n\n\t\t\tXKit.extensions.stats.dashboard();\n\n\t\t\treturn false;\n\t\t});\n\n\t\tif (XKit.interface.where().user_url === \"\") {\n\n\t\t\t$(\"#xstats_blog_stats\").parent().remove();\n\t\t\treturn;\n\n\t\t}\n\n\t\t$(\"#xstats_blog_stats\").css(\"display\", \"block\");\n\n\t\t$(\"#xstats_blog_stats\").click(function() {\n\n\t\t\tXKit.extensions.stats.blog(XKit.interface.where().user_url);\n\n\t\t\treturn false;\n\t\t});\n\n\t},\n\n\twindow_id: -1,\n\n\tblog: function(url) {\n\n\t\tvar m_window_id = XKit.tools.random_string();\n\t\tXKit.extensions.stats.window_id = m_window_id;\n\n\t\t$(\"#xkit-stats-background, #xkit-stats-window\").remove();\n\n\t\t$(\"body\").append(\"
\";\n\t\t}\n\n\t\tm_object[\"post[two]\"] = m_text;\n\n\t\tm_object[\"post[publish_on]\"] = \"\";\n\t\tm_object.custom_tweet = \"\";\n\t\tm_object[\"post[tags]\"] = \"xstats\";\n\n\n\t\tXKit.interface.kitty.get(function(kitty_data) {\n\n\t\t\tif (kitty_data.errors === true) {\n\n\t\t\t\tXKit.extensions.stats.post_error(\"Can't post stats\", \"Can't authenticate post. Please check your internet connection and try again later.\");\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tGM_xmlhttpRequest({\n\t\t\t\tmethod: \"POST\",\n\t\t\t\turl: \"http://www.tumblr.com/svc/post/update\",\n\t\t\t\tdata: JSON.stringify(m_object),\n\t\t\t\theaders: {\n\t\t\t\t\t\"X-tumblr-puppies\": kitty_data.kitten,\n\t\t\t\t\t\"X-tumblr-form-key\": XKit.interface.form_key(),\n\t\t\t\t\t\"Content-Type\": \"application/json\"\n\t\t\t\t},\n\t\t\t\tonerror: function(response) {\n\t\t\t\t\tXKit.interface.kitty.set(\"\");\n\t\t\t\t\tXKit.extensions.stats.post_error(\"Can't post stats\", \"Server returned invalid/blank page or could not be reached. Maybe you hit your post limit for today, or your account has been suspended. Please check your internet connection and try again later.\");\n\t\t\t\t},\n\t\t\t\tonload: function(response) {\n\t\t\t\t\tvar m_obj = JSON.parse(response.responseText);\n\t\t\t\t\tXKit.interface.kitty.set(response.getResponseHeader(\"X-Tumblr-Kittens\"));\n\t\t\t\t\tXKit.window.close();\n\t\t\t\t\tif (m_obj.errors === false) {\n\t\t\t\t\t\t$(\"#xkit_post_crushes\").html(\"Posted!\");\n\t\t\t\t\t\tXKit.notifications.add(\"Your stats have been posted to the current blog.\", \"ok\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tXKit.extensions.stats.post_error(\"Can't post stats\", \"Server returned a non-JSON object. Maybe you hit your post limit for today, or your account has been suspended. Please try again later.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t});\n\n\t},\n\n\tpost_error: function(title, message) {\n\n\t\tXKit.window.show(title, message, \"error\", \"
\");\n\n\t},\n\n\tdestroy: function() {\n\t\tXKit.interface.sidebar.remove(\"xstats_sidebar\");\n\t\tthis.running = false;\n\t}\n\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpGNzdGMTE3NDA3MjA2ODExODA4MzkyMjM2MzU5MTQ4NCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo2NEI4MkJBRTNEQkIxMUUzQUNFRTg1NzM5MDIyMUUyMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2NEI4MkJBRDNEQkIxMUUzQUNFRTg1NzM5MDIyMUUyMCIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjAxODAxMTc0MDcyMDY4MTFBRTczREVDNEM5OEM0RTE5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkY3N0YxMTc0MDcyMDY4MTE4MDgzOTIyMzYzNTkxNDg0Ii8+IDwvcmRmOkRlc2NyaXB0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","css":"#xkit-stats-background {\n\tbackground: rgba(0,0,0,0.22);\n\tposition: fixed;\n\ttop: 0; left: 0;\n\twidth: 100%; height: 100%;\n\tz-index: 1000;\n}\n\n#xkit-stats-window {\n\tposition: fixed;\n\ttop: 50%;\n\tleft: 50%;\n\theight: 400px;\n\tmargin-top: -200px;\n\tbackground: white;\n\tbox-shadow: 0px 1px 3px rgba(0,0,0,0.44);\n\tborder-radius: 6px;\n\twidth: 600px;\n\tmargin-left: -300px;\n\tfont-size: 16px;\n\tbox-sizing: border-box;\n\t-webkit-box-sizing: border-box;\n\t-moz-box-sizing: border-box;\n\tpadding: 30px;\n\tpadding-top: 21px;\n\tz-index: 1001;\n}\n\n#xkit-stats-window .m_window_title {\n\n\tfont-size: 16px;\n\tfont-weight: bold;\n\tmargin-bottom: 10px;\n\theight: 40px;\n\tline-height: 40px;\n\n}\n\n#xkit-stats-subtext {\n\tmargin-top: 10px;\n\tfont-size: 13px;\n\tcolor: rgb(180,180,180);\n}\n\n#xkit-stats-text {\n\tmargin-bottom: 10px;\n}\n\n#xkit-stats-inner {\n\tpadding: 14px 20px;\n}\n\n#xkit-stats-window.xkit-stats-loading #xkit-stats-inner {\n\tpadding: 0px;\n\tpadding-top: 135px;\n\tline-height: 20px;\n\tfont-size: 18px;\n\ttext-align: center;\n\tcolor: rgb(180,180,180);\n}\n\n.xkit-stats-blog-list {\n\tborder-top: 1px solid rgb(220,220,220);\n\tborder-left: 1px solid rgb(220,220,220);\n\theight: 81px;\n\tbox-sizing: border-box;\n\t-webkit-box-sizing: border-box;\n\t-moz-box-sizing: border-box;\n}\n\n.xkit-stats-blog {\n\tdisplay: inline-block;\n\tfloat: left; height: 40px;\n\twidth: 50%;\n\tborder-right: 1px solid rgb(220,220,220);\n\tborder-bottom: 1px solid rgb(220,220,220);\n\tbox-sizing: border-box;\n\t-webkit-box-sizing: border-box;\n\t-moz-box-sizing: border-box;\n\tposition: relative;\n}\n\n.xkit-stats-blog:hover {\n\tbackground: rgb(245,245,245);\n\tcursor: pointer;\n}\n\n.xkit-stats-blog.xkit-empty-slot,\n.xkit-stats-blog.xkit-empty-slot:hover {\n\tcursor: default;\n\tbackground: white;\n}\n\n.xkit-stats-blog .m_title {\n\tposition: absolute;\n\tleft: 45px;\n\tline-height: 40px;\n\ttop: 0;\n\tmax-width: 110px;\n\ttext-overflow: ellipsis;\n\toverflow: hidden;\n\tfont-size: 14px;\n\twhite-space: nowrap;\n}\n\n.xkit-stats-blog .m_avatar {\n\tposition: absolute;\n\twidth: 25px; height: 25px;\n\ttop: 50%; left: 10px;\n\tmargin-top: -12px;\n\tborder-radius: 3px;\n\tbackground: black;\n}\n\n.xkit-stats-blog .m_percentage {\n\tposition: absolute;\n\tright: 11px;\n\ttop: 50%;\n\tline-height: 20px;\n\theight: 20px;\n\tmargin-top: -10px;\n\tfont-size: 12px;\n\tcolor: rgb(150,150,150);\n}\n\n.xkit-stats-separator {\n\tfont-size: 12px;\n\ttext-transform: uppercase;\n\tmargin-bottom: 10px;\n\tmargin-top: 10px;\n\ttext-align: center;\n\tcolor: rgb(130,130,130);\n\tbackground: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAABCAYAAAD0In+KAAAAEUlEQVQIW2M8dOjQfzs7O0YAFyYEApdFJZwAAAAASUVORK5CYII=') 50% 50% repeat-x;\n}\n\n.xkit-stats-separator div {\n\tbackground: white;\n\tpadding: 0px 10px;\n\tdisplay: inline;\n}\n\n.xkit-stats-post-type {\n\tdisplay: inline-block;\n\tfloat: left;\n\twidth: 77px;\n\ttext-align: right;\n\tborder: 1px solid rgb(220,220,220);\n\tbox-sizing: border-box;\n\t-moz-box-sizing: border-box;\n\t-webkit-box-sizing: border-box;\n\tpadding-right: 10px;\n\tfont-size: 12px;\n\tcolor: rgb(130,130,130);\n\tborder-right: 0px;\n\theight: 40px;\n\tline-height: 40px;\n\tbackground-position: 7px 50%;\n\tbackground-repeat: no-repeat;\n\tbackground-size: 22px;\n\tposition: relative;\n}\n\n.xkit-stats-post-type .m_text {\n\tposition: absolute;\n\ttop: 0;\n\tfont-weight: bold;\n\tleft: 10px;\n\tfont-size: 12px;\n}\n\n.xkit-stats-post-type.animated,\n.xkit-stats-post-type.liked,\n.xkit-stats-post-type.reblogged,\n.xkit-stats-post-type.original {\n\twidth: 25%;\n}\n\n.xkit-stats-two-boxes .xkit-stats-post-type.reblogged,\n.xkit-stats-two-boxes .xkit-stats-post-type.original {\n\twidth: 50%;\n}\n\n.xkit-stats-post-types {\n\tborder-right: 1px solid rgb(220,220,220);\n\theight: 40px;\n}\n\n.xkit-stats-post-type.regular {\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAYAAABWk2cPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDZGNjZFRUYxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDZGNjZFRjAxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0NkY2NkVFRDFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0NkY2NkVFRTFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsJAvbIAAAGdSURBVHja7NbJK0VhGMfxY8otKUMyRIaNlLmrEEIiEaJY8xdYsFOUlViwtbNhK5EpEkrpWiArC5GFoRQbynB9T/3U6aTc18JQ561P5z3vGZ73fd7ndG9YMBi0frqFW7/QvKBe0P8bNPKzQb/f7x4aRSneMIZdkyCBQODroK6WjkFE6/zONOh30tviCGi3RiSYZs80aLeO27hEChpc98RhGJs4xg7GkfOdoLmoVH/CkdYe18pmMYI6TaoKA1hEomnQDvhwg3WsabxWL7dUYM2wfzl6kYV6PCJP10MOGoEu9TfwpJk/aE9bde0M5ZrIMjJR6Hh3tEnQIpSof41q5ONcY5063iIeQ9rzQ0w6CipoUmldjuv94mw1SEUalrSABczjAnNIMinvKLSpb8/+RPe+KV0ViEGTXmwH3Ee7nslGrOk3ValUWkrbjGuv91CmbGxpPEOTsFTJPvWfQ93TPh1fVETO9opV9e1iOsWRUr0i97jSPQWhrnRa396D0utuU/pmP9LaoFUn40BVXqzzO/fDYd4fMy+oF/TPB30XYAA/FlCkcqgrRwAAAABJRU5ErkJggg==);\n}\n\n.xkit-stats-post-type.photo {\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAYAAABWk2cPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDZGNjZFRjMxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDZGNjZFRjQxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0NkY2NkVGMTFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0NkY2NkVGMjFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PklZnYUAAAF6SURBVHja7JXNKwVRGIfdcRVKIhHJSmQhKWwslBUbWSibG9a3lIWVjaIsxNLKBkluyVcs/AEiO8nGQjefC2woF8V4Tr3qNM3cc+c2WZ23nuZ89f7m954zZ2Ku6xb8d8SsqBW1opGJXgw1qUcdVMlQDaxCuWfpFyThUvqvkG7duvLNGze81CgsaKJBUQobWv8TZmDOb7FjSDYfIJiGTVjT3Km4gWm4htmgpCanFZ6+cjAJO1ALhXAPHbACB+LwGZbyFf3R2mrzE+LyENpk/A7GoQ/WpaQD2ZLGQxy6bTiFc6iUsQyUifMeSMGUKZETQlQdlDERfJMyt0CzuFRHfRe+TYnCOH2AYWmPiMBfHMmzEd7FfSROlcMnOPYI6qHEiqN0OgjLcJtljSpzUZR7mhAniwHzqrQTuSRyQsyXyGHq91nXDXtQnYuoqbyP0KD11d27D2dwInduO/T6GMjkK5qUctZ73HdClzb24flUXrJdg/Z/akWtaKj4FWAAOdZxVglFqeYAAAAASUVORK5CYII=);\n}\n\n.xkit-stats-post-type.quote {\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAYAAABWk2cPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTgwREFEQzYxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTgwREFEQzcxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0NkY2NkVGNTFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0NkY2NkVGNjFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pp21znIAAAFvSURBVHja7JXNK0RRGMZdH5OSmgk1ZWEjCmUjElnNjiysmFKSBRZIFlZWNpKNz0lCdoqUlSWK3Sws+CuoSdJQXL9T7+J2u+eYMyarc+pXz9z3ueeZ9517z3i+75f99/JcqAt1oSUJzWW8qMt90A77v+yrPCnYjk/7X+FipcUXHIc9qIFPONb4BuEIGqAWVsOG8gIDF+FEAs/gRuNLw4UEXsNllKmQTqdgQ/QmLEDUbzIkHVbBKUzCezGhvbAlWm00r/E1y7hjMoUJyOs2NY03Jp1VwwvM6R5GmUQdfIgvb+rEFDoCXaIrYA1mIRHy9cOwaDX2ZViCxmJC0wEdl5HtwC20BGqjAa2mMgbrcAc9tqGdmusdsBu4t1vja4JD29CEoTYAraLrDb4229A3Q029FknRr7bHoCn00VBTR9uz6GwpQzOG2hU8iT6Ab40vaxt6DisR75w63makW7Xu5XMu5HuQJ979n7pQF/q39SPAAIOXa93gNF/cAAAAAElFTkSuQmCC);\n}\n\n.xkit-stats-post-type.link {\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAYAAABWk2cPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTgwREFEQ0ExQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTgwREFEQ0IxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBODBEQURDODFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBODBEQURDOTFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Puk0h+sAAAGqSURBVHja7NZNKARhHMfx3fVyQF6Kg7eUXLQHysUmL+HgtUjhILJRilyk3F04SHJyUBJyk1YSeYkktZID2igHB29Rsl4Om/Wd+h+mzczq2XLYdurT7Owzz/x2Zv7Pv7X6/X7Lf2/WSGgkNDxDG9dHAr8qQyccyIIN93BjEWv6k111Y79eN/qPPy4RE3BKkH7LE+1YQT/uzC5m+0NgElbRY3L+u+ybsSVPIaTQSVQYjO2hCKmowTXsmEOMamg5ug3GHtCCLwziCB1yXIVW1VCnydg2XrCEcUzhGLcy3qsa6jAZ0yo2Bbl4xT5ikSDjBUYTg1VvRsDxE3ZQDK8UUCU8eMMo0uXcZNVQ/ZPYlWXxKJ+1dxeFOPShXmog6BYsVAvIgQ8DSJPlU4ghaRYbBnO9qu/0VPYfuECbPNpvXEq40eZRvdN5NCEepZhGNg7wiQaTuQuqd+rCpry7GQnU1u2yFE2JwbxzzKreqU+KRAvOlwZwJZWZaTDnGV1Szcpt8Aa1unVoNwk8k3Z4EmrvtUhPrZYucyjNQN/stYIbliXjjvxziISGb+iPAAMAcz18wE4/HnIAAAAASUVORK5CYII=);\n}\n\n.xkit-stats-post-type.chat {\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAYAAABWk2cPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTgwREFEQ0UxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTgwREFEQ0YxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBODBEQURDQzFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBODBEQURDRDFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pmc6aAoAAAEzSURBVHjaYvz//z8DvQHjqKWjlo5aSjVL7ebf4AZSnUAcAsS8BMz6DsRHgLgUiG+DBA4lamBVyELAoG4gziTSA1xA7A/EfEDsCsR/cSlkImBQJBmhZwK1mIFcS7nJjTZ8koSC9x8S+xkQswKxKJT/GIhBCYIDGpSSSHp+UOJTZNABxLOB+A+UfwaIzwFxL1QOBniA2IdalrIB8UpQogbi+UD8E4jfQX3KhqSOGSofQQ1LfwGxIxAXAPF6IL4FxWZAbIAlJbuRG6fI4BsQqyPF3R9o3AkDMTua2hVAnE0NS52AWASIpYDYC4jloBa/gQY1DHwF4lxoYUGWpchJPwqJrYxHz1+kxEZWnJJTMDMRMpeQpdfIsPQ9pfm0BIhfkWAhKG5boYlutD4dtXTUUuoAgAADAGzGZBT0+yuKAAAAAElFTkSuQmCC);\n}\n\n.xkit-stats-post-type.audio {\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAYAAABWk2cPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RDAxMTc2OTExQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDAxMTc2OTIxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBODBEQUREMDFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpEMDExNzY5MDFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmgJCVkAAAGISURBVHja7NY/KEVRHMDxd3kxyKoMMmCxeFneoje8wSBiMOgVykCkPEYyUCYDBgsRr2SUwkKUyeDPYDBICovVS/l/fU/9bp1u7nvvnluk7qlPt/On8zvn/s49Xcu27chvl6LIH5QwaBj0/waN5upcTx+7m6rRj1bUyKIfcIhlnOmDe+cTgXfajUuM4x2bal14xABOMV3InFEfATO4RjuOXP2NWMAkyjEaNKe1WMQdkj8EVOUcLThBGm1Bg47J6kckf14li2Goy3wi19z5gpahAzfYLmCB6iAdII4606DqhFbiAmuY0foqUKXV1anelbyrkjANmpFnJ3rQrPWlUK/Vk5LXIanPmQZtkPyoyT6Ec+q78KzN8abtOCWpMT5I+3KQ1NgvaYsL9bpnpc35G9iTlBh/p69YQkzqn/JswpXkbVXaLHnuaOONd6pP4EysLoJB3GPLtdNY0Au/1GP8C0rkKnzye6Xme71Tkp9i9Ln6brGi1Z1XvyEHLOs1qRX+DYZBw6B+yrcAAwC9FkublkrqIgAAAABJRU5ErkJggg==);\n}\n\n.xkit-stats-post-type.video {\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAYAAABWk2cPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RDAxMTc2OTUxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDAxMTc2OTYxQjE3MTFFMzlCQzlBMTM0MjI0M0M4NEIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpEMDExNzY5MzFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpEMDExNzY5NDFCMTcxMUUzOUJDOUExMzQyMjQzQzg0QiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PlXaRegAAAFvSURBVHja7NbNKwRxHMfxXYsL+QdwEScHBxlyVPKQEkkO/oF18XwQKSSHvbg5c/TwH9iLXLQlFwc5SFKK5CGUxXp/63PYNjvGzoTDfOvVtL+Znc9vfvOd2Y1mMpnIb1dR5A8qDA1DA6lit53x6UXb9GEG9bjCOpbQhBU4eMIOZnFnX1pLzBcWSnViCzF9rsGCJtCKKo2XYwSVGMBbwVdKTWQFWp2hDIM5x9kKvKAXLdj3c0+rtb3FPcZxrDF7lV1rOW0tdzVe57eRzrXdQDse0KixKJLoQQodGj/x1UhUAm0YQ5euInuiQ2jWvSzFNg78hibVTHNowA3ec46pwCU2sfzF/h+H1mq54jp5vrJuvcCj+mAUU4WGnmprs/9wOc7u76GWehX9bqHfNZKjk9ljU+LCJp/GsAJ9LW9Kj4uXcvTCCOTdG/MYalf6HFSo1x+FI3TjNYgTpj2G2nO6h0l1cf6uC/+YhaFh6L8P/RRgAJzXR6+2XwoJAAAAAElFTkSuQmCC);\n}\n\n.xkit-stats-buttons {\n\tmargin-top: 15px;\n}","title":"XStats","description":"The XKit Statistics Tool","developer":"STUDIOXENIX","version":"0.3.8","details":"This extension allows you to view statistics regarding your dashboard, such as the percentage of post types, top 4 posters, and more. In the future, it will allow you to view statistics regarding your and others blogs.","frame":"false","beta":"false","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/tag_replacer.json b/Extensions/dist/tag_replacer.json
new file mode 100644
index 000000000..2bda4229f
--- /dev/null
+++ b/Extensions/dist/tag_replacer.json
@@ -0,0 +1 @@
+{"id":"tag_replacer","script":"//* TITLE Tag Replacer **//\n//* VERSION 1.0.3 **//\n//* DESCRIPTION Replace old tags! **//\n//* DETAILS Allows you to bulk replace tags of posts. Go to your Posts page on your dashboard and click on the button on the sidebar and enter the tag you want replaced, and the new tag, and Tag Replacer will take care of the rest. **//\n//* DEVELOPER new-xkit **//\n//* FRAME false **//\n//* BETA false **//\n\nXKit.extensions.tag_replacer = new Object({\n\n\trunning: false,\n\n\trun: function() {\n\n\t\tthis.running = true;\n\n\t\tif (!XKit.interface.where().channel || !XKit.interface.where().user_url) {\n\t\t\treturn;\n\t\t}\n\n\t\tXKit.tools.init_css(\"tag_replacer\");\n\n\t\tXKit.interface.sidebar.add({\n\t\t\tid: \"tag_replacer_sidebar\",\n\t\t\ttitle: \"Tag Replacer\",\n\t\t\titems: [{\n\t\t\t\tid: \"tag_replacer_button\",\n\t\t\t\ttext: \"Replace a tag\",\n\t\t\t\tcarrot: true\n\t\t\t}]\n\t\t});\n\n\t\t$(\"#tag_replacer_button\").click(() => {\n\t\t\tconst url = XKit.interface.where().user_url;\n\t\t\tconst shown_warning = XKit.storage.get(\"tag_replacer\", \"shown_warning\", \"false\");\n\n\t\t\tif (shown_warning !== \"true\") {\n\t\t\t\tthis.warning(url);\n\t\t\t} else {\n\t\t\t\tthis.show(url);\n\t\t\t}\n\t\t});\n\n\t},\n\n\twarning: function(url) {\n\t\tXKit.window.show(\n\t\t\t\"Important Notice\",\n\n\t\t\t\"Usage of Tag Replacer has reportedly caused some accounts to be temporarily terminated. \" +\n\t\t\t\"We aren't sure exactly why this is or what we can do to fix it.
\" +\n\t\t\t\"Please only use this tool if you understand that, in the event that your usage of it triggers Tumblr's spam detector, \" +\n\t\t\t\"you will have to contact Tumblr support to restore your account.
\" +\n\t\t\t\"We have provided a link below to Tumblr's support form for you to bookmark. \" +\n\t\t\t\"(The link opens in a new tab.)
\" +\n\t\t\t\"If you accept this risk, this warning will not be shown again.\",\n\n\t\t\t\"warning\",\n\n\t\t\t'
I understand
' +\n\t\t\t'
Cancel
' +\n\t\t\t'Tumblr support →'\n\t\t);\n\n\t\t$(\"#xkit-tag-replacer-accept-risk\").click(() => {\n\t\t\tXKit.storage.set(\"tag_replacer\", \"shown_warning\", \"true\");\n\t\t\tthis.show(url);\n\t\t});\n\t},\n\n\tshow: function(url) {\n\n\t\tXKit.window.show(\n\t\t\t'Tag Replacer',\n\n\t\t\t'Replace this tag:' +\n\t\t\t'' +\n\t\t\t'
Case Sensitive Mode
' +\n\t\t\t'
' +\n\t\t\t'With this tag: (leave blank to delete the tag)' +\n\t\t\t'' +\n\t\t\t'
Don\\'t replace the tag but append the tag above
' +\n\t\t\t'
' +\n\t\t\t'You can replace only one tag at a time. ' +\n\t\t\t'Due to technical reasons, you can\\'t edit tags containing dashes or slashes.',\n\n\t\t\t'question',\n\n\t\t\t'
Go!
' +\n\t\t\t'
Cancel
'\n\t\t);\n\n\t\t$(\"#xkit-tag-replacer-case-sensitive\").click(function() { $(this).toggleClass(\"selected\"); });\n\t\t$(\"#xkit-tag-replacer-append\").click(function() { $(this).toggleClass(\"selected\"); });\n\n\t\t$(\"#xkit-tag-replacer-ok\").click(function() {\n\t\t\tvar $replace = $(\"#xkit-tag-replacer-replace\");\n\t\t\tvar replace = $replace.val().trim();\n\n\t\t\tif (!$(\"#xkit-tag-replacer-case-sensitive\").hasClass(\"selected\")) {\n\t\t\t\treplace = replace.toLowerCase();\n\t\t\t}\n\n\t\t\tvar $replace_with = $(\"#xkit-tag-replacer-with\");\n\t\t\tvar replace_with = $replace_with.val().trim();\n\n\t\t\tfunction complain($target, message, original) {\n\t\t\t\t$target\n\t\t\t\t\t.css(\"border-color\", \"red\")\n\t\t\t\t\t.attr(\"placeholder\", message)\n\t\t\t\t\t.val(\"\")\n\t\t\t\t\t.click(() => $target\n\t\t\t\t\t\t.removeAttr(\"style\")\n\t\t\t\t\t\t.attr(\"placeholder\", original)\n\t\t\t\t\t\t.off(\"click\"));\n\t\t\t}\n\n\t\t\tif (replace.includes(\",\")) {\n\t\t\t\tcomplain($replace, \"Tag to search for can not contain commas.\", 'Enter a tag (example: \"I like pandas\")');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (replace === \"\") {\n\t\t\t\tcomplain($replace, \"Enter the tag you want replaced.\", 'Enter a tag (example: \"I like pandas\")');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ($(\"#xkit-tag-replacer-append\").hasClass(\"selected\") && replace_with === \"\") {\n\t\t\t\tcomplain($replace_with, \"Enter the tag(s) you want to append.\", 'Enter a new tag (example: \"I still like pandas\")');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tXKit.extensions.tag_replacer.start(url, replace, replace_with);\n\n\t\t});\n\n\t},\n\n\turl: \"\",\n\treplace: \"\",\n\treplace_with: \"\",\n\tpost_ids: [],\n\tpost_count: 0,\n\tappend_mode: false,\n\tcase_sensitive: false,\n\tsuccess_count: 0,\n\tfail_count: 0,\n\n\tstart: function(url, replace, replace_with) {\n\n\t\tObject.assign(this, {\n\t\t\turl: url,\n\t\t\treplace: replace,\n\t\t\treplace_with: replace_with,\n\t\t\tpost_ids: [],\n\t\t\tpost_count: 0,\n\t\t\tsuccess_count: 0,\n\t\t\tfail_count: 0,\n\t\t\tappend_mode: $(\"#xkit-tag-replacer-append\").hasClass(\"selected\"),\n\t\t\tcase_sensitive: $(\"#xkit-tag-replacer-case-sensitive\").hasClass(\"selected\")\n\t\t});\n\n\t\tXKit.window.show(\n\t\t\t'Working...',\n\n\t\t\t'Tag Replacer is trying to find posts with the tag you\\'ve entered, please wait. This might take a while.' +\n\t\t\t'
Initializing...
',\n\n\t\t\t'info'\n\t\t);\n\n\t\tthis.fetch_posts();\n\t},\n\n\tfetch_posts: function(page = 0) {\n\t\tGM_xmlhttpRequest({\n\t\t\tmethod: \"GET\",\n\t\t\turl: `https://api.tumblr.com/v2/blog/${this.url}/posts?` + $.param({\n\t\t\t\t\"api_key\": XKit.api_key,\n\t\t\t\t\"tag\": this.replace,\n\t\t\t\t\"limit\": 50,\n\t\t\t\t\"offset\": page * 50\n\t\t\t}),\n\t\t\tonload: response => {\n\t\t\t\tlet data = JSON.parse(response.responseText);\n\n\t\t\t\tif (data.response.posts.length === 0) {\n\t\t\t\t\tthis.start_replace();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tdata.response.posts.forEach(post => this.post_ids.push(post.id_string));\n\t\t\t\t$(\"#xkit-tag-replacer-loaded\").html(`Loaded ${this.post_ids.length} tagged posts...`);\n\n\t\t\t\tthis.fetch_posts(page + 1);\n\t\t\t},\n\t\t\tonerror: () => this.show_error(\n\t\t\t\t\"Can't fetch posts\",\n\n\t\t\t\t\"Tag Replacer could not fetch a list of tagged posts. This is usually due to your blog being private. \" +\n\t\t\t\t\"Please check your blog settings and try again.\"\n\t\t\t)\n\t\t});\n\t},\n\n\tstart_replace: function() {\n\t\tthis.post_count = this.post_ids.length;\n\n\t\tif (this.post_count === 0) {\n\t\t\tXKit.window.show(\n\t\t\t\t'Nothing for me to do.',\n\n\t\t\t\t`Tag Replacer could not find any posts tagged #${this.replace}.`,\n\n\t\t\t\t'info',\n\n\t\t\t\t'
OK
'\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tXKit.window.show(\n\t\t\t'Working...',\n\n\t\t\t`Tag Replacer is ${this.append_mode ? \"appending\" : \"replacing\"} tags.\n\t\t\t${XKit.progress.add(\"tag-replacer-progress\")}\n\t\t\tThis might take a long, long, long time.`,\n\n\t\t\t'info'\n\t\t);\n\n\t\tthis.replace_tag();\n\t},\n\n\treplace_tag: function() {\n\t\tconst post_id = this.post_ids.shift();\n\n\t\tif (post_id === undefined) {\n\t\t\tthis.done_replacing();\n\t\t\treturn;\n\t\t}\n\n\t\tXKit.interface.fetch({\"id\": post_id}, response => {\n\t\t\tif (response.error) {\n\t\t\t\tthis.show_error(\n\t\t\t\t\t\"Can't fetch post.\",\n\t\t\t\t\t\"Try again later.\"\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet tags = response.data.post.tags.split(\",\");\n\t\t\tlet edited = false;\n\n\t\t\tif (this.append_mode) {\n\t\t\t\ttags.push(this.replace_with);\n\t\t\t\tedited = true;\n\t\t\t} else {\n\t\t\t\tfor (let tag of tags) {\n\t\t\t\t\tlet i = tags.indexOf(tag);\n\n\t\t\t\t\tif (!this.case_sensitive) {\n\t\t\t\t\t\ttag = tag.toLowerCase();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (tag === this.replace) {\n\t\t\t\t\t\ttags[i] = this.replace_with;\n\t\t\t\t\t\tedited = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!edited) {\n\t\t\t\tthis.update_progress();\n\t\t\t\tthis.replace_tag();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet edited_post = XKit.interface.edit_post_object(response.data, {\n\t\t\t\ttags: tags.join(\",\")\n\t\t\t});\n\n\t\t\tXKit.interface.edit(edited_post, edit_response => {\n\t\t\t\tif (edit_response.error) {\n\t\t\t\t\tthis.fail_count++;\n\t\t\t\t} else {\n\t\t\t\t\tthis.success_count++;\n\t\t\t\t}\n\n\t\t\t\tthis.update_progress();\n\t\t\t\tsetTimeout(() => this.replace_tag(), 5000);\n\t\t\t});\n\t\t});\n\t},\n\n\tupdate_progress: function() {\n\t\tlet done = this.post_count - this.post_ids.length;\n\t\tlet percentage = Math.round((done * 100) / this.post_count);\n\t\tXKit.progress.value(\"tag-replacer-progress\", percentage);\n\t},\n\n\tdone_replacing: function() {\n\t\tif (this.fail_count == this.post_count) {\n\t\t\tthis.show_error(\n\t\t\t\t\"Oh dear...\",\n\t\t\t\t\"I was unable to replace tags on any of the posts. Try again later?\"\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tXKit.window.show(\n\t\t\t'All done!',\n\n\t\t\t`Tag Replacer successfully ${this.append_mode ? \"appended\" : \"replaced\"} tags on ${this.success_count} posts. \n\t\t\t(Failed: ${this.fail_count})`,\n\n\t\t\t'info',\n\n\t\t\t'
' +\n\t\t'New XKit support'\n\t),\n\n\tdestroy: function() {\n\t\tthis.running = false;\n\t\tXKit.tools.remove_css(\"tag_replacer\");\n\t\tXKit.interface.sidebar.remove(\"tag_replacer_sidebar\");\n\t}\n\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpGNzdGMTE3NDA3MjA2ODExODA4MzkyMjM2MzU5MTQ4NCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo2OTQ0NzNGNDU3NzkxMUUzODM5QzhFMjcwMUMyMERGNiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2OTQ0NzNGMzU3NzkxMUUzODM5QzhFMjcwMUMyMERGNiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjAxODAxMTc0MDcyMDY4MTFBRTczREVDNEM5OEM0RTE5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkY3N0YxMTc0MDcyMDY4MTE4MDgzOTIyMzYzNTkxNDg0Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+XmoWTQAACHJJREFUeNrsWntwVNUZ/76zC0lkEcHRAlUICcJCeCQECNESEwKCOCDTJPRhW9OHduoDq31M+w+dsdOxRWccGFvH2loEpJRXGm0pjyYKBsQRDRBCQt7vkAdJZJPdZJN7Tr9vd8s+cO/dXUqnW3Pn/LHk3Hvu7/e9zu87FxzJeAai+TIDYlQTEBDlF3kg2glEOYP/AwJRH0I46oFRD3ze9wEcJTAaQjfPA2Lnz/HWuJBW0pTccUz9tYR/L5kjnsvB8XGgafQv1Tcgtx+Fd0tvBgHT5nuWM4cgQ+SvhpgxYDYZjzFmXDQThiVcbIS2btXYLZbNgVtiaAotcWKpVfXZobY18BXZS0yvbsJlSer4eRjRdJAEG6bNs3QJfOV+BhfihYgLE2FYg8pGaO9W9Z1i6WwYa3YZSojUe6BvAOrafNCnmn6cy89NGo+LrepEJByEwR3h7nMCxXdWY24mP/tJpbZlLwwMeqbGmET+AxAX61l5RarpR7le7omTxa8fh3Fx4RMQqDcCLptDFpyUfzwsS8r1WHxrJeZk8uOlVdpv9tFTnAllDVr+i6AUu1SQrxIC/UccXngMLHEGkPyHabM1U49fnk8I2Rzai3vhyEdwqRk+rGBrz5sezA+YnABOCZXN0NGjGrpwwjj5/A5+JS07fQpcHeAV7piICZP9OEyy4KJZ6siZ0D0Qxj4gT5TB+TrP/VKpQ6dVmhXj7wyWDyJ/lRRCHTxBfpBnq8FE7wN8NlfcO1eevKhe3qdeKZBkxOxkv+eIUjhbkwB3nAcbvtflXr8pxzAbUn/1R7JwbZprHUWc8ekcQs9/v28uPptHWcEcis76mWlrgQEk/0E5oDt8bZOcSLXSO5UwBROn6BNQF5vU0TNgoqAXmLlIZMzzciMOz22kGq1+VyiLz3nQb3uba5EQoQ/zZ2RqsCKZOhO/vlId+xg+tcHdk8XXMmFcrB76sgb5y53u9TEvS+QtD/RPulVirtp2UL1aSLEE5Q3q/XOh4/GgGtn4vN4+t+NnvJH5wmrrgV4bR2pcjB76C42M3v2OH+aI9DlB7/ywUm4rhBHnf0nM4dRJQEM/cgj9r3Z5bL+J0Fv1FkyzQuJH0HAZnEMRERD/YT1HcS9f2M3LKsRNG8Qyq8H9Z6qh8wqMi4HYMdBvj0CN6o4w6XnQuyp0KOjl6Ur5+iFAE9UT00uPY/YiY0j+w6wvqFW/AydaQkbfLLfs8dj+yfUibbYB+tf+rk6Vu8WFeObLcOst4tsPSERVXBqOB3Q3avnmMa+YMUT/0j4QJiqa4qkQ0Bd+oE5eYGXhHBZPrsPZX3TBEeKbKzE7NXQpIfiVOuNsrXzjCDgMSoSqbJFbD4JZMPon1uHS2YZxrw6fgZgYfoVUkn7bh7ya7xsrMCvFANi/hzCkqEpr5B/+QXbSRV/AkUOa+fsP4eJZBug/riY5yIvHjsXsFP5R3qD9/pDXTMTh0ZWYlRyamEtdY6yZOnqh9QomTfeIe180VW3yt2+7VZr43oNIol8f/Sc18k9HgQ0nxNMbROYCauWgtg06+1RTt1gQ73kF1YCkaTDghKZOo4Zm8ZqQdB9x6OjFeTPIPF401W3ytb+52wZuA6gjM0BfK7cfc7EV4qmHcdZUBmq9i/u4unbo7lMt3WJ+/LUeCOdOYyne3sOpEpzAg6FqV+JwuRfnz3ALbFXTzqEFLts/ugpTEg3Ql9ZS0+wSMCieWM/or/VxBLSnH1q6oOtT6LFh8kzP9socpjP6mjadhiaMoc7Xc3tOdemqXW4/zCrNbOL2JTnBAP25OrmriCOH8uQHPujdl2NI9do8b7l9AiP2Tg1Cv0NXzIUpJZjD7mLVfMW1h2giLwvJ6cboi5ktZd1ja3Gmv4YddHJcVXG/j6tSxMPpXj1ns2uvH4badh2QZrZKuGLhfAMrPEscLp5rjL6sXu55z5054rtrAhX40LDcUUT7N0dLdrLYcK9v+6q9cRQaOvQRRiqEhoZhwEEFUae8ehT1nuMuXwPXqAD09iGqSMSQE4HQr0/3Tl21a1RqKfSNxVzopya+V9xYIIlxxaZtOWD6ae715ZXRlzfJ/SVg5inO8oQvBEbOW8XqUgsfHGUtFOvSvHFic7ACaOwMBVuEHiBfm36SxxVpwK6RgnCOfIaqO1Diydr869BT5BB6ihyyPaFfv8yLvt/BJ3x1l0PWQubwhyWWobtb3oUJYHdqLxf4clAVLbLwlPvEjmvUDH/0DidVJFXZTEtx5Dy01Cfu7fLNfyqK+5DBCAirhXYNTIrnEHIb4KuZOC+ezKZtLXRzYPTvnHKpOiEeWRF4bEG2//N7pD54ncwFjP5ajpLtdxYx+nDARFKF0Kc3d3G4X+49QRGvvfIOLpyhztWDmbpQKXKX47Q7/ON+mCqSqmrhmpMxX6xd4p3qH5S731VNXeHiEWGfp04cj1NvD1xlYwZMslAAwIV6NCMNkZeB0+4MjJy/HOespXpP6Fen+h34vVWk6jsiONwN2wO4PCnwT4NOTserDhgeUTZqgMZT1gYeWFDk7H9fVbey7e9LEmtS/bKW3NLcHUEsRNLUCx/Fptp71KkKVdEMQ063qoGhEbjNEtiIUsXcX6Lce21yoh/6gUEOP4qcSD8UmcMqpGi9m0Q8AyqtVacroK//+mqsqpqp2xIb0vlON/oDJ1V1i+ceTaMOho8Z3bYn9I0dN/KdCEd+sSuMuyffBhMsHMeGd865S+R8ibutAyXqUqvfVEoCpy+lBE01dt3wJ6ZwNmLV1Qc0QniESo08XgaaVDWtAferskZJW4TNoUg/m+CGCdy0r5Tqg4uexLiuoac2NchUJDlggmi+zNH+oXXUA/8DBKL9/0qI6HYByS4cDaHREPqcExjNgdEQupHrXwIMADRBahmAgN+DAAAAAElFTkSuQmCC","css":"#xkit-tag-replacer-progress {\n\n\tborder-top: 1px dashed rgb(190,190,190);\n\tmargin-top: 10px;\n\tpadding-top: 10px;\n\n}\n\n.xkit-tag-replacer-separator {\n\tborder-top: 1px dashed rgb(200,200,200);\n\tmargin-top: 10px; margin-bottom: 10px;\n\theight: 0;\n}","title":"Tag Replacer","description":"Replace old tags!","developer":"new-xkit","version":"1.0.3","details":"Allows you to bulk replace tags of posts. Go to your Posts page on your dashboard and click on the button on the sidebar and enter the tag you want replaced, and the new tag, and Tag Replacer will take care of the rest.","frame":"false","beta":"false","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/tagviewer.json b/Extensions/dist/tagviewer.json
new file mode 100644
index 000000000..54f7fa43f
--- /dev/null
+++ b/Extensions/dist/tagviewer.json
@@ -0,0 +1 @@
+{"id":"tagviewer","script":"//* TITLE TagViewer **//\n//* VERSION 0.5.3 **//\n//* DESCRIPTION View post tags easily **//\n//* DEVELOPER new-xkit **//\n//* DETAILS This extension allows you to see what tags people added to a post while they reblogged it. It also provides access to the post, and to Tumblr search pages to find similar posts.
Based on the work of inklesspen **//\n//* FRAME false **//\n//* BETA false **//\n//* SLOW false **//\n\nXKit.extensions.tagviewer = new Object({\n\n\trunning: false,\n\tslow: false,\n\tapiKey: \"5CIOyjHfcrNFlyEJl2D7vnoDTYqV30lNAUaSd4LJKoBFOZOmxp\",\n\n\tbutton_icon: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAvBJREFUOBGlVM9L2mEYf96vaVQeWgrTOpUSaxs6yNrBdhiCRJcNL7vIQogxSErZP1CwwW5pmCNvHnbrsEOwg+07iIUjQSg3XIfGiCiTzdpaRvPXPs8XHVKzFXvh8XmfX5/3877P81WEw+ErJycnz4UQViKSIPWrCOO9Vqt9OjY2lqsPNNqLmZmZeQQfNUpgPw77pFar746Pj2fOy+MYM7pVTfKoVKrbKB6siSRJdxBbq1Qq1wqFwtu5uTlDNbehklAsOAr1sVwu38NWhtz3+XyJycnJd2DmgH1h0NNvNgE2WgBMQJTl9Xq/XQb0NOAsmP4E0mwV79KgIhAIrILVAIAG+Zr1QKf3oVBIh7d8A78V+X9tFDMscSESmlmfty5yfQaMMwgaAgIh3XmAHPsXqMRDy/SRa+Xr/C+oMjI8XzxnPG9ms/nz8PBwqqmpaQCHMONdCI/SPA5ehf6z+PBisSijzsKkWlpa+hVAzkgkEjeNRmMcTm06nT7e2toSBwcHzQaDgSwWy6+enp4SimJIfQj9o4YaDAYf47lesA0SFgWQmcGOAWR3cXHRBlt0dXVRR0cH7e3tUSaToba2torL5Sq3t7d/R24/QL9gQh5g/xL5Kuhpv98/pYJhhiHH4/Hs0tKSrbu7m1AoNBqNAtbX10d2u512dnbE8vKyhEM0Op3O63Q6JfiC9WDAIQHHh2QyeYxk29DQENlsNsJVKRqNEmI8TjQ6OkpgRisrK/w05Ha7y3q9XkQiEZHP5xVmDMaLx0a0trbeUKwL/uzv70s4THg8nkN8DNP1ZczwOhxr6+vrKlmWBbpMDoeD8J60ublJJpOJuDGxWIy2t7dpZGSEent7axj8f/kMt5iqOWpNccLxOpvNioWFBcXX2dmpNIUbwoJ55bdVrl4tLkMfQ9wAfFX1kVLMBpjaoeRSqaTe2NgQqVSKcrmcws5qtRI3i9+zuo6geT5d8KVqzjMaoFchKUgBcmZh3g7h/Ap5AlGfAYDjN8f2ldpe2/sVAAAAAElFTkSuQmCC\",\n\n\tpreferences: {\n\t\t\"notice\": {\n\t\t\ttext: \"Notice\",\n\t\t\ttype: \"separator\"\n\t\t}\n\t},\n\n\tcpanel: function(obj) {\n\t\tif (typeof XKit.extensions.retags == \"undefined\") {\n\t\t\t$(obj).append(\"
Hi! This extension has no options, but you may be looking for Retags.
\");\n\t\tXKit.extensions.tagviewer.load_tags();\n\n\t},\n\n\tload_tags: function() {\n\n\t\t// Load the next set of notes and tags.\n\n\t\tvar m_url = XKit.extensions.tagviewer.notes_url;\n\t\tvar m_init_id = XKit.extensions.tagviewer.init_id;\n\n\t\tvar m_post_id = XKit.extensions.tagviewer.post_id;\n\n\t\t$.ajax({\n\t\t\turl: m_url,\n\t\t\tdataType: \"json\"\n\t\t}).fail(function() {\n\n\t\t\tXKit.window.close();\n\t\t\tXKit.window.show(\"Unable to fetch required data\", \"TagViewer could not get the required data from Tumblr servers. Please try again later or file a bug report by going to the XKit Blog.\", \"error\", \"
When installed, this extension disables the standard Themes extension, and adds a button on your sidebar on your dashboard that lets you write and load your own theme. When you are done, you can submit it to xkit-dev.tumblr.com so it can be added to the theme gallery.
This extension is not recommended for people without CSS/HTML experience and only provided for XKit theme developers. Please disable Themes and Yoohoo! extensions before using. For better editing, Textarea Code Formatter for Chrome or Tabinta for Firefox is recommended. **//\n//* DEVELOPER STUDIOXENIX **//\n//* FRAME false **//\n//* BETA false **//\n\nXKit.extensions.theme_editor = new Object({\n\n\trunning: false,\n\ttesting_theme: \"/*\\nTheme title\\nTheme description (one-line)\\nSTUDIOXENIX\\n1\\n*/\\n\\nbody {\\n\\tbackground: red;\\n}\\n\\n#content {\\n\\tbackground: rgba(155,90,120,0.9);\\n}\\n\\n.post {\\n\\tbackground: blue;\\n\\tborder-radius: 20px;\\n}\\n\\n.post_content{\\n\\tbackground: transparent !important;\\n}\\n\\n#right_column:after {\\n\\tbackground: none !important;\\n}\\n\\n.controls_section li {\\n\\tbackground: green;\\n}\",\n\n\trun: function() {\n\t\tthis.running = true;\n\n\t\tif (!XKit.interface.is_tumblr_page()) {\n\t\t\treturn;\n\t\t}\n\n\t\tXKit.tools.init_css(\"theme_editor\");\n\n\t\tif (typeof XKit.extensions.themes !== \"undefined\") {\n\t\t\tif (XKit.extensions.themes.running === true) {\n\t\t\t\tXKit.extensions.themes.destroy();\n\t\t\t}\n\t\t}\n\n\t\tif (typeof XKit.extensions.yahoo !== \"undefined\") {\n\t\t\tif (XKit.extensions.yahoo.running === true) {\n\t\t\t\tXKit.extensions.yahoo.destroy();\n\t\t\t}\n\t\t}\n\n\t\tXKit.interface.sidebar.add({\n\t\t\tid: \"xkit-theme-editor-sidebar\",\n\t\t\ttitle: \"Theme Editor\",\n\t\t\titems: [{\n\t\t\t\tid: \"xkit-theme-editor-button\",\n\t\t\t\ttext: \"Edit Theme\"\n\t\t\t}]\n\t\t});\n\n\t\t$(\"#xkit-theme-editor-button\").click(function() {\n\n\t\t\tXKit.extensions.theme_editor.open();\n\n\t\t\treturn false;\n\t\t});\n\n\t\tthis.load_user_theme();\n\n\t},\n\n\tload_user_theme: function(passed_theme) {\n\n\t\t// Just in case.\n\t\t$(\"#xkit-themes-user-theme\").remove();\n\t\t$(\"#xkit-theme-editor-user-theme\").remove();\n\n\t\tvar m_theme = XKit.storage.get(\"theme_editor\", \"my_theme\", XKit.extensions.theme_editor.testing_theme);\n\n\t\tif (typeof passed_theme !== \"undefined\") {\n\t\t\tm_theme = passed_theme;\n\t\t}\n\n\t\t$(\"body\").append(\"\");\n\n\t},\n\n\topen: function() {\n\n\t\tif ($(\"#xkit-theme-editor-shadow\").length > 0) {\n\t\t\t$(\"#xkit-theme-editor-shadow\").remove();\n\t\t\t$(\"#xkit-theme-editor-window\").remove();\n\t\t}\n\n\t\tvar m_theme = XKit.storage.get(\"theme_editor\", \"my_theme\", XKit.extensions.theme_editor.testing_theme);\n\n\t\tvar m_html = \"
\" +\n\t\t\t\t\"
\" +\n\t\t\t\t\t\"\" +\n\t\t\t\t\t\"
\" +\n\t\t\t\t\t\t\"
Apply Changes
\" +\n\t\t\t\t\t\t\"
Save theme
\" +\n\t\t\t\t\t\t\"
Delete theme
\" +\n\t\t\t\t\t\t\"
Close window
\" +\n\t\t\t\t\t\"
\" +\n\t\t\t\t\"
\";\n\n\t\t$(\"body\").append(m_html);\n\n\t\t$(\"#xkit-theme-editor-textarea\").bind(\"keydown\", function(event) {\n\t\t\tif (event.which === 190) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t});\n\n\t\t$(\"#xkit-theme-editor-close, #xkit-theme-editor-shadow\").click(function() {\n\t\t\tXKit.extensions.theme_editor.close();\n\t\t});\n\n\t\t$(\"#xkit-theme-editor-apply\").click(function() {\n\t\t\tXKit.extensions.theme_editor.load_user_theme($(\"#xkit-theme-editor-textarea\").val());\n\t\t});\n\n\t\t$(\"#xkit-theme-editor-save\").click(function() {\n\t\t\tXKit.storage.set(\"theme_editor\", \"my_theme\", $(\"#xkit-theme-editor-textarea\").val());\n\t\t\tXKit.extensions.theme_editor.load_user_theme();\n\t\t\tXKit.extensions.theme_editor.close();\n\t\t});\n\n\t\t$(\"#xkit-theme-editor-delete\").click(function() {\n\t\t\tXKit.window.show(\"Delete theme?\", \"You can not undo this action.\", \"question\", \"
Yes, delete my theme.
Cancel
\");\n\t\t\t$(\"#xkit-theme-editor-delete-confirm\").click(function() {\n\t\t\t\tXKit.storage.set(\"theme_editor\", \"my_theme\", \"\");\n\t\t\t\tXKit.extensions.theme_editor.load_user_theme();\n\t\t\t\tXKit.extensions.theme_editor.close();\n\t\t\t\tXKit.window.close();\n\t\t\t});\n\t\t});\n\n\t},\n\n\tclose: function() {\n\n\t\t$(\"#xkit-theme-editor-shadow\").fadeOut('slow');\n\t\t$(\"#xkit-theme-editor-window\").fadeOut('fast');\n\n\t},\n\n\tdestroy: function() {\n\t\tthis.running = false;\n\t\tXKit.interface.sidebar.remove(\"xkit-theme-editor-sidebar\");\n\t\t$(\"#xkit-theme-editor-user-theme\").remove();\n\t\tXKit.tools.remove_css(\"theme_editor\");\n\t}\n\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTZFNTg0RjlEMjgyMTFFMkJCOTdBNTcwNEE2QzQ3MTgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTZFNTg0RkFEMjgyMTFFMkJCOTdBNTcwNEE2QzQ3MTgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1NkU1ODRGN0QyODIxMUUyQkI5N0E1NzA0QTZDNDcxOCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1NkU1ODRGOEQyODIxMUUyQkI5N0E1NzA0QTZDNDcxOCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pt/I/oMAAAamSURBVHjatFZJbBtV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","css":"#xkit-theme-editor-shadow {\n\tz-index: 600000;\n\tposition: fixed;\n\ttop: 0; left: 0;\n\twidth: 100%; height: 100%;\n\tbackground: rgba(0,0,0,0.0);\n\tdisplay: none;\n}\n\n#xkit-theme-editor-window {\n\tz-index: 600001;\n\tposition: fixed;\n\ttop: 50%; left: 50%;\n\twidth: 800px; height: 440px;\n\tmargin-top: -220px; margin-left: -400px;\n\tbackground: white;\n\tbox-shadow: 0px 1px 3px rgba(0,0,0,0.55);\n\tborder-radius: 6px;\n\topacity: 0.35;\n}\n\n#xkit-theme-editor-window:hover {\n\topacity: 1;\n}\n\n#xkit-theme-editor-buttons {\n\tposition: absolute;\n\tbottom: 0px; left: 0;\n\twidth: 100%; height: 40px;\n\tbox-sizing: border-box;\n\t-webkit-box-sizing: border-box;\n\tbackground: rgb(240,240,240);\n\tpadding-left: 8px; padding-top: 2px;\n\tborder-radius: 0px 0px 5px 5px;\n}\n\n#xkit-theme-editor-textarea {\n\tfont-family: Courier, monospace;\n\tbox-sizing: border-box;\n\t-webkit-box-sizing: border-box;\n\tborder: 1px solid rgb(200,200,200);\n\tborder-radius: 5px 5px 0px 0px;\n\tpadding: 10px;\n\twidth: 100%;\n\theight: 400px;\n\tresize: none;\n}","title":"Theme Editor","description":"For theme developers","developer":"STUDIOXENIX","version":"0.1.7","details":"If you are good with CSS, hop in and make your own theme.
When installed, this extension disables the standard Themes extension, and adds a button on your sidebar on your dashboard that lets you write and load your own theme. When you are done, you can submit it to xkit-dev.tumblr.com so it can be added to the theme gallery.
This extension is not recommended for people without CSS/HTML experience and only provided for XKit theme developers. Please disable Themes and Yoohoo! extensions before using. For better editing, Textarea Code Formatter for Chrome or Tabinta for Firefox is recommended.","frame":"false","beta":"false","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/themes.json b/Extensions/dist/themes.json
new file mode 100644
index 000000000..321495f8d
--- /dev/null
+++ b/Extensions/dist/themes.json
@@ -0,0 +1 @@
+{"id":"themes","script":"//* TITLE Themes **//\n//* VERSION 0.1.3 **//\n//* DESCRIPTION Themes for your dashboard **//\n//* DETAILS This extension allows you to install themes from the XKit Theme Gallery onto your dashboard. New themes are added regularly, and if you are good with CSS, send an ask to xkit-dev.tumblr.com to get your theme added here! **//\n//* DEVELOPER STUDIOXENIX **//\n//* FRAME false **//\n//* BETA false **//\n\nXKit.extensions.themes = new Object({\n\n\trunning: false,\n\tcurrent_theme: \"\",\n\tgallery_themes_file: [],\n\tgallery_themes_contents: [],\n\tgallery_themes_version: [],\n\tm_theme_count: 0,\n\n\trun: function() {\n\t\tthis.running = true;\n\n\t\tif (!XKit.interface.is_tumblr_page()) {\n\t\t\treturn;\n\t\t}\n\n\n\t\tthis.current_theme = XKit.storage.get(\"themes\", \"my_theme\", \"\");\n\t\tif (typeof this.current_theme === \"undefined\") {\n\t\t\tthis.current_theme = \"\";\n\t\t}\n\n\t\tXKit.tools.init_css(\"themes\");\n\n\t\tif (this.current_theme !== \"\") {\n\t\t\tif (typeof XKit.extensions.yahoo !== \"undefined\") {\n\t\t\t\tif (XKit.extensions.yahoo.running) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.load_theme();\n\t\t}\n\n\n\t},\n\n\tcpanel_add: function(obj) {\n\n\t\tvar m_class = \"\";\n\t\tif (obj.file === XKit.extensions.themes.current_theme) {\n\t\t\tm_class = \"selected\";\n\t\t}\n\n\t\tXKit.extensions.themes.gallery_themes_file.push(obj.file);\n\t\tXKit.extensions.themes.gallery_themes_contents.push(obj.contents);\n\t\tXKit.extensions.themes.gallery_themes_version.push(obj.version);\n\n\t\tvar m_html = \"
Loading theme gallery Please wait, I'm fetching the latest themes for you.
\";\n\t\t$(obj).html(m_html);\n\n\t\t$(\"#xkit-extensions-panel-right\").nanoScroller();\n\t\t$(\"#xkit-extensions-panel-right\").nanoScroller({ scroll: 'top' });\n\n\t\tXKit.download.page(\"themes/index.php\", function(mdata) {\n\n\t\t\tif (mdata.server_down === true) {\n\n\t\t\t\t$(\"#xkit-themes-loading\").html(\"Server unreachable Please try again later.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$(\"#xkit-themes-loading\").remove();\n\t\t\tXKit.extensions.themes.m_theme_count = 0;\n\t\t\t$(obj).html(\"\");\n\n\t\t\t// Create default theme object:\n\t\t\tvar def_theme = {\n\t\t\t\t\"name\": \"Tumblr Default\",\n\t\t\t\t\"version\": \"1\",\n\t\t\t\t\"developer\": \"Tumblr, Inc.\",\n\t\t\t\t\"file\": \"\",\n\t\t\t\t\"description\": \"The standard Tumblr theme\"\n\t\t\t};\n\t\t\tXKit.extensions.themes.cpanel_add(def_theme);\n\n\t\t\tfor (var theme in mdata.themes) {\n\t\t\t\tXKit.extensions.themes.cpanel_add(mdata.themes[theme]);\n\t\t\t}\n\n\t\t\t$(\".xkit-theme-obj\").click(function() {\n\n\t\t\t\tif ($(this).hasClass(\"selected\") === true) { return; }\n\t\t\t\t$(\".xkit-theme-obj.selected\").removeClass(\"selected\");\n\t\t\t\tXKit.extensions.themes.load_gallery_theme($(this).attr('data-theme-id'));\n\t\t\t\t$(this).addClass(\"selected\");\n\n\t\t\t});\n\n\t\t\tif (XKit.extensions.themes.m_theme_count >= 3) {\n\t\t\t\t$(\".xkit-theme-obj:last-child\").css(\"border-bottom\", \"0\");\n\t\t\t}\n\n\t\t\t$(\"#xkit-extensions-panel-right\").nanoScroller();\n\t\t\t$(\"#xkit-extensions-panel-right\").nanoScroller({ scroll: 'top' });\n\n\t\t});\n\n\t},\n\n\tdestroy: function() {\n\t\tXKit.tools.remove_css(\"themes\");\n\t\t$(\"#xkit-themes-user-theme\").remove();\n\t\tthis.running = false;\n\t}\n\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RUY5N0NCN0REMEVGMTFFMkIzMzlFNEI5QzIwNDI2MDAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RUY5N0NCN0VEMEVGMTFFMkIzMzlFNEI5QzIwNDI2MDAiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpFRjk3Q0I3QkQwRUYxMUUyQjMzOUU0QjlDMjA0MjYwMCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFRjk3Q0I3Q0QwRUYxMUUyQjMzOUU0QjlDMjA0MjYwMCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PubDIKEAAAYcSURBVHjaZFbfi1Vl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","css":"#xkit-themes-loading {\n\tfont-size: 17px;\n\tcolor: rgb(120,120,120);\n\tpadding: 30px;\n\ttext-align: center;\n\tmargin-top: 40px;\n}\n\n.xkit-theme-obj {\n\tborder-bottom: 1px solid rgb(190,190,190);\n\tposition: relative;\n\tpadding: 8px 15px 8px 30px;\n\tfont-size: 13px;\n\tbackground-repeat: no-repeat;\n\tbackground-position: 11px 11px;\n\tcursor: pointer;\n}\n\n.xkit-theme-obj.selected {\n\tbackground-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAJCAYAAAALpr0TAAAAPElEQVQYV2NkIBIwEqHuP1ANIyGFYEUgw/AphCtCV4gsgaIIl0IMRdgU4nQOshtBJpkA8VlsIUHI13A9AJekCgr1mBZRAAAAAElFTkSuQmCC');\n}\n\n.xkit-theme-obj:hover {\n\tbackground-color: rgb(245,245,245);\n}\n\n.xkit-theme-obj:active {\n\tbackground-color: rgb(235,235,235);\n}\n\n.xkit-theme-title {\n\tfont-weight: bold;\n}\n\n.xkit-theme-description {\n\tcolor: rgb(80,80,80);\n}\n\n.xkit-theme-developer {\n\tfont-size: 11px;\n\tcolor: rgb(130,130,130);\n}","title":"Themes","description":"Themes for your dashboard","developer":"STUDIOXENIX","version":"0.1.3","details":"This extension allows you to install themes from the XKit Theme Gallery onto your dashboard. New themes are added regularly, and if you are good with CSS, send an ask to xkit-dev.tumblr.com to get your theme added here!","frame":"false","beta":"false","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/themes_plus.json b/Extensions/dist/themes_plus.json
new file mode 100644
index 000000000..3be3c2330
--- /dev/null
+++ b/Extensions/dist/themes_plus.json
@@ -0,0 +1 @@
+{"id":"themes_plus","script":"//* TITLE Themes+ (preview) **//\n//* VERSION 0.2.7 **//\n//* DESCRIPTION Customize More **//\n//* DETAILS Themes+ lets you customize your dashboard to your liking by letting you choose the colors, the images and options yourself. You can also export and import the themes you and others made. Please note that this is the preview edition, so it's lacking some functionality. **//\n//* DEVELOPER STUDIOXENIX **//\n//* FRAME false **//\n//* BETA false **//\n\njQuery.fn.selectText = function() {\n\tvar doc = document;\n\tvar element = this[0];\n\tvar range, selection;\n\n\tif (doc.body.createTextRange) {\n\t\trange = document.body.createTextRange();\n\t\trange.moveToElementText(element);\n\t\trange.select();\n\t} else if (window.getSelection) {\n\t\tselection = window.getSelection();\n\t\trange = document.createRange();\n\t\trange.selectNodeContents(element);\n\t\tselection.removeAllRanges();\n\t\tselection.addRange(range);\n\t}\n};\n\n/**\n *\n * Color picker\n * Author: Stefan Petre www.eyecon.ro\n *\n * Dual licensed under the MIT and GPL licenses\n *\n */\n/* eslint-disable id-length, no-unused-vars */\n(function($) {\n\tvar ColorPicker = function() {\n\t\tvar\n\t\t\tids = {},\n\t\t\tinAction,\n\t\t\tcharMin = 65,\n\t\t\tvisible,\n\t\t\ttpl = '
\";\n\n\t\t\t\t\tXKit.window.show(\"Install Theme?\", \"Install and replace the current theme with this one?\" + mx_html, \"question\", \"
Install
Cancel
\");\n\n\t\t\t\t\t$(\"#xkit-themes-plus-confirm-input-code-install\").click(function() {\n\n\t\t\t\t\t\tXKit.extensions.themes_plus.current_theme = data_obj;\n\n\t\t\t\t\t\tXKit.extensions.themes_plus.save_theme();\n\n\t\t\t\t\t\tXKit.tools.remove_css(\"themes_plus_current_theme\");\n\n\t\t\t\t\t\tXKit.extensions.themes_plus.cp(true);\n\n\t\t\t\t\t\tXKit.extensions.themes_plus.render(true);\n\n\t\t\t\t\t\tXKit.window.close();\n\n\t\t\t\t\t});\n\n\t\t\t\t});\n\n\t\t\t});\n\n\t\t});\n\n\t\t$(\"#xkit-themes-plus-delete-theme\").click(function() {\n\n\t\t\tXKit.window.show(\"Delete Theme\", \"You sure you want to delete this theme? You can not undo this with the Cancel button on the control panel, by the way.\", \"warning\", \"
\");\n\t\t\t\t$(\"#xkit-full-width-gifs\").on(\"click\", function() {\n\t\t\t\t\tXKit.extensions.tweaks.full_width_gifs_do($(\"#xkit-full-width-gifs\").prop(\"checked\"));\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t},\n\n\tfull_width_gifs_do: function(is_checked) {\n\t\tif (!is_checked) {\n\t\t\t$(\".editor-wrapper\").find(\".tmblr-full\").addClass(\"tweaks-full-width-gifs\");\n\t\t\t$(\".editor-wrapper\").find(\".tmblr-full\").removeClass(\"tmblr-full\");\n\t\t\t$(\".editor\").focus();\n\t\t\treturn;\n\t\t} else {\n\t\t\t$(\".editor-wrapper\").find(\".tweaks-full-width-gifs\").addClass(\"tmblr-full\");\n\t\t\t$(\".editor\").focus();\n\t\t\treturn;\n\t\t}\n\t},\n\n\tdestroy: function() {\n\t\tthis.running = false;\n\t\tthis.addShowTagsObserver.disconnect();\n\n\t\tXKit.tools.remove_css(\"xkit_tweaks\");\n\t\tXKit.tools.remove_css(\"xkit_tweaks_collapsible_tag_display\");\n\t\tXKit.tools.remove_css(\"xkit_tweaks_wrap_tags\");\n\t\tXKit.tools.remove_css(\"xkit_tweaks_wrap_tags_v2\");\n\t\t$(\"body\").off(\"click\", '.xkit_tweaks_show_all_tags_button', XKit.extensions.tweaks.show_all_tags_button_event);\n\t\t$('.xkit_tweaks_show_all_tags_button').remove();\n\t\t$('.post_tags').removeClass('xkit_tweaks_wrap_tags_one_line_processed');\n\t\tXKit.tools.remove_css(\"tweaks_slim_activity_feed\");\n\t\tXKit.tools.remove_css(\"tweaks_old_sidebar_width\");\n\t\tXKit.tools.remove_css(\"tweaks_old_photo_margins\");\n\t\tXKit.tools.remove_css(\"tweaks_no_mobile_banner\");\n\t\tXKit.tools.remove_css(\"xkit_tweaks_larger_small_text_on_reblogs\");\n\t\tXKit.tools.remove_css(\"xkit_tweaks_hide_share\");\n\t\tXKit.tools.remove_css(\"xkit_tweaks_wide_sources\");\n\n\t\tXKit.post_listener.remove(\"tweaks\");\n\n\t\tclearInterval(this.hide_bubble_interval);\n\n\t\t$(\".xkit-small-blog-setting-link\").remove();\n\t\t$(\".small_links.by-xkit\").remove();\n\t\t$(\"#new_post_in_tracked_tags_bubble\").remove();\n\t\t$(\"#tumblr_radar\").css(\"display\", \"block\");\n\t\t$(\"#xkit_customize_button\").remove();\n\t\t$(\"a.spotlight\").parent().css(\"display\", \"block\");\n\t\t$(\"a.activity\").parent().css(\"display\", \"block\");\n\t\t$(\".radar_header\").parent().css(\"display\", \"block\");\n\t\t$(\".customize\").parent().css(\"display\", \"block\");\n\t\t$(\"xkit_post_tags_inner_add_back\").addClass(\"post_tags_inner\");\n\t\t$(\"xkit_post_tags_inner_add_back\").removeClass(\"xkit_post_tags_inner_add_back\");\n\t\tif (XKit.page.react) {\n\t\t\t$(`${XKit.css_map.keyToCss('radar')}`).parent().show();\n\t\t\t$(`${XKit.css_map.keyToCss('recommendedBlogs')}`).parent().show();\n\t\t}\n\n\t\tXKit.tools.remove_css(\"tweaks_grey_urls\");\n\t}\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,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\n","title":"Tweaks","description":"Various little tweaks for your dashboard.","developer":"new-xkit","version":"6.0.13","details":"These are small little tweaks that allows you customize your dashboard. If you have used XKit 6, you will notice that some of the extensions have been moved here as options you can toggle. Keep in mind that some of the tweaks (the ones marked with a '*') can slow down your computer.","frame":"false","beta":"false","slow":"true"}
\ No newline at end of file
diff --git a/Extensions/dist/unreverse2.json b/Extensions/dist/unreverse2.json
new file mode 100644
index 000000000..9e18456da
--- /dev/null
+++ b/Extensions/dist/unreverse2.json
@@ -0,0 +1 @@
+{"id":"unreverse2","script":"//* TITLE Unreverse **//\n//* VERSION 1.0.3 **//\n//* DESCRIPTION Places the post buttons on top **//\n//* DETAILS This extension places the reblog/like/reply/etc buttons on the top of the post. It is unsupported, and might cause problems with your dashboard. Please use with caution. **//\n//* DEVELOPER STUDIOXENIX **//\n//* FRAME false **//\n//* BETA false **//\n\nXKit.extensions.unreverse2 = new Object({\n\n\trunning: false,\n\n\trun: function() {\n\n\t\tif (XKit.interface.where().inbox === true) { return; }\n\n\t\tthis.running = true;\n\t\tXKit.tools.init_css(\"unreverse2\");\n\t\tXKit.post_listener.add(\"unreverse2\", XKit.extensions.unreverse2.do);\n\t\tXKit.extensions.unreverse2.do();\n\n\t\tif (XKit.storage.get(\"unreverse2\", \"shown_warning\", \"\") !== \"yas\") {\n\n\t\t\tXKit.window.show(\"Unsupported extension\", \"Unreverse is an unsupported extension, which might cause problems with your dashboard.
You can still use it, but no support will be provided if you use it. If you experience any problems such as popup menus not opening, please disable this extension before contacting XKit support.\", \"warning\", \"
OK
\");\n\n\t\t\t$(\"#unreverse-warning-close-button\").click(function() {\n\t\t\t\tXKit.storage.set(\"unreverse2\", \"shown_warning\", \"yas\");\n\t\t\t\tXKit.window.close();\n\t\t\t});\n\n\t\t}\n\n\t},\n\n\tdo: function() {\n\n\t\t$(\".post.post_full\").not(\".unreverse-done\").each(function() {\n\t\t\t$(this).addClass(\"unreverse-done\");\n\t\t\t$(this).find(\".post_source\").clone().removeClass(\"post_source\").addClass(\"unreverse_post_source\").appendTo($(this).find(\".post_footer\"));\n\t\t});\n\n\t},\n\n\tdo_reverse: function() {\n\n\t\t$(\".unreverse_post_source\").remove();\n\n\t\t$(\".post.post_full.unreverse-done\").each(function() {\n\t\t\t$(this).removeClass(\"unreverse-done\");\n\t\t});\n\n\t},\n\n\tdestroy: function() {\n\t\tthis.running = false;\n\t\tXKit.tools.remove_css(\"unreverse2\");\n\t\tXKit.extensions.unreverse2.do_reverse();\n\t\tXKit.post_listener.remove(\"unreverse2\");\n\t}\n\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpGNzdGMTE3NDA3MjA2ODExODA4MzkyMjM2MzU5MTQ4NCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpDNEY0MERFNjQyNUMxMUUzOTM4NEFERTg2NTAwRDBDNSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpDNEY0MERFNTQyNUMxMUUzOTM4NEFERTg2NTAwRDBDNSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjAxODAxMTc0MDcyMDY4MTFBRTczREVDNEM5OEM0RTE5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkY3N0YxMTc0MDcyMDY4MTE4MDgzOTIyMzYzNTkxNDg0Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+L1xb2wAAA89JREFUeNrsWVtIVEEY/mb2KK5IktcgkagHN0uwhAwrWsx6inrPKAQjqBe7EL5V9FQ9BJV0oQtUFAXRjQgyAtuSIoI0qba0C5hmaZt5WV0v28x6O7ueOTu54p6J/ZmH4cx/Zv9/vv/yzVmSetYPlUUjUFuo4varj4BGSCwHoo2A4g4YPj26IppuDfnhakHNN3/3wFRDaLMjyue6dSF+eMmhF7jZFCZFKQuhycMKkmHHCScq8omhhePDGIHKZ9E0PTEOWxyYN4vP9xXgbQd51CzEgWRdGLZmdp5fQ9Zl80lTJ0pu+Qf9ohBiTlhy7Hb5O/q4iQuSUZBORGrWdaDLhwdfRo/ZkSJU06iF+8BP71hCJ0Jkp0Ys3MnG4z6eQmSnZmU6SnQTkZ2UQRP5OLYKRXPC6BRmIsEW9GRZBpLizF6ZcECso9nkIoj9NvsxkWQloaoY5dWo7zBYzZ3Ny/mSTLg9uPcZl99xZ7bnoSATjZ247saNjwIEyAQCIjtlk3j9fBwohLm3F9dh2yO8bg96uCgFp4qRmsDneal8LE7B2mzYtVHfDi7n88vvTUOImCSx9M2NWd81gN/9BqtpCdyI1h6+GrIhs3XE+nHZMD/09VIHrpg6EDKfEp0OqN1uwpFXBouX1iLVjrJqePpDqVS/RKP3DgoImC6ERHbK5kB8oAp87zWOorp2XHVjaBhxFMPBPd9ukyA/mvG2VBdCIjtlq1CnD1X1uOY2Xj1eh3Q7TjoNllzf0BOO1t/9JKhCOgSEVUgyiWua+T1j71I8/IqGX6GryfE4V4LewTF2pROm/LINzizhzozw3PlknKMySUxpAKmww+/HjjxsyuEvxE8aLE5YEvcPGb+7/zmetwrJws7H8PQZvxjSyAyHZpNoxcz78kUoy+XzKieHwvComJrhbr5h7HmKw0VYOTfoeXM3v3h87YbIBkp1fYBGUEaJTk8EJauwf3zCYscArKzF6izsykeanZedS+9w/wvavZA0QFhGJXPgTAM/j9IcVDzBB4/ASrF744lU24KNC+BqRpvX7Dj+pZFJk9HTb3issyrpE5f2sLsxgnmzUUozRCfSPjAirFwCsM0UASe6JIyUC0WHTgf3gWlAYIZFphOrj4DqNzKpRha1ECK6EIqkkVkBChJDwKoIaCogEOD9CiIgdSfWVGhklAhP2tL/kU0/mYtWCJmROfURoAo4QE2ulFSFEDK7kVmaTk/jx90YAjEE/t8bmeoIEEUQ+H+pROy70EzQaVW/C7la+QjpCZMcgNqiUcU9sHQOyCGgvAOIhVBU5a8AAwDZvtGnunBxuwAAAABJRU5ErkJggg==","css":".post_full .post_controls {\n\tposition: absolute;\n\ttop: 2px;\n\tright: 0px;\n\ttext-align: right;\n\twidth: 100%;\n\tpadding-right: 18px;\n\tdisplay: block;\n\tz-index: 0;\n\twidth: 60%;\n}\n\n.post_full .post_header {\n\n\tposition: relative;\n\tz-index: 1000;\n\twidth: 40%;\n\n}\n\n.unreverse_post_source {\n\n\tfloat: right;\n\tdisplay: block;\n\twidth: 350px;\n\tfont-size: 12px;\n\ttext-align: right;\n\n}\n\n.post_full .post_source { display: none !important; }\n\n.post .unreverse_post_source { font-weight: normal; }\n\n.post .unreverse_post_source .post_source_name_prefix {\n\n\tpadding-right: 6px;\n\n}\n\n.post .unreverse_post_source .post_source_link {\n\n\tcolor: #a7a7a7;\n\ttext-decoration: none;\n\n}\n\n.post .unreverse_post_source .post_source_link:hover{\n\n\tcolor: #969696;\n\n}\n","title":"Unreverse","description":"Places the post buttons on top","developer":"STUDIOXENIX","version":"1.0.3","details":"This extension places the reblog/like/reply/etc buttons on the top of the post. It is unsupported, and might cause problems with your dashboard. Please use with caution.","frame":"false","beta":"false","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/vanilla_audio.json b/Extensions/dist/vanilla_audio.json
new file mode 100644
index 000000000..d4e64372b
--- /dev/null
+++ b/Extensions/dist/vanilla_audio.json
@@ -0,0 +1 @@
+{"id":"vanilla_audio","script":"//* TITLE Vanilla Audio **//\n//* VERSION 0.2.1 **//\n//* DESCRIPTION\tAdds an alternative audio player to audio posts. **//\n//* DETAILS This extension adds a native HTML5 audio player to every audio post, with an option for the default volume and the ability to loop the audio. **//\n//* DEVELOPER akunohomu **//\n//* FRAME false **//\n//* BETA true **//\n\nXKit.extensions.vanilla_audio = new Object({\n\n\trunning: false,\n\n\tpreferences: {\n\t\t\"default_volume\": {\n\t\t\ttext: \"Default volume\",\n\t\t\tdefault: 1.0,\n\t\t\tvalue: 1.0,\n\t\t\ttype: \"combo\",\n\t\t\tvalues: [\n\t\t\t\t\"100%\", 1.0,\n\t\t\t\t\"75%\", 0.75,\n\t\t\t\t\"50%\", 0.50,\n\t\t\t\t\"25%\", 0.25\n\t\t\t],\n\t\t\tdesktop_only: true\n\t\t}\n\t},\n\n\trun: function() {\n\t\t\"use strict\";\n\t\tthis.running = true;\n\t\tXKit.post_listener.add(\"vanilla_audio\", this.add_audio);\n\t\tthis.add_audio();\n\t},\n\n\tadd_audio: function() {\n\t\t\"use strict\";\n\t\t$(\".native-audio-container\").not(\".xkit-audio-added\").each(function(index) {\n\t\t\tvar $this = $(this);\n\t\t\t$this.addClass(\"xkit-audio-added\");\n\t\t\tvar url = $this.attr(\"data-stream-url\");\n\t\t\tvar key = $this.attr(\"data-post-key\");\n\t\t\tif (url && key) {\n\t\t\t\tvar player = $(\"\");\n\t\t\t\tplayer.prop(\"volume\", XKit.extensions.vanilla_audio.preferences.default_volume.value);\n\t\t\t\t$this.parent().after(player);\n\t\t\t}\n\t\t});\n\t},\n\n\tdestroy: function() {\n\t\t\"use strict\";\n\t\tXKit.post_listener.remove(\"vanilla_audio\");\n\t\t$(\".xkit-audio-added\").removeClass(\"xkit-audio-added\");\n\t\t$(\".xkit-audio-player\").remove();\n\t\tthis.running = false;\n\t}\n\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAMAAADDpiTIAAAC+lBMVEUAAABaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpzhTbLAAAA/XRSTlMA/gL7AQb2/QT5DO8J8xAZFOt4FS+iDVQj5rP1oGXjIdbuZ4/k2EIXHjzh1OwgPu3FtHoWMKPKkeUkfgdEu4A126roKNCZEUzCComyHwXEdo1AyLZ8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\n","title":"Vanilla Audio","description":"Adds an alternative audio player to audio posts.","developer":"akunohomu","version":"0.2.1","details":"This extension adds a native HTML5 audio player to every audio post, with an option for the default volume and the ability to loop the audio.","frame":"false","beta":"true","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/vanilla_video.json b/Extensions/dist/vanilla_video.json
new file mode 100644
index 000000000..7b723534c
--- /dev/null
+++ b/Extensions/dist/vanilla_video.json
@@ -0,0 +1 @@
+{"id":"vanilla_video","script":"//* TITLE Vanilla Videos **//\n//* VERSION 1.0.1 **//\n//* DESCRIPTION Make the video player unexciting **//\n//* DETAILS Use the browser's native video controls. Only affects Tumblr's player. **//\n//* DEVELOPER new-xkit **//\n//* FRAME false **//\n//* BETA true **//\n//* SLOW true **//\n\n'use strict';\n\nXKit.extensions.vanilla_video = {\n\n\tpreferences: {\n\t\t\"default_volume\": {\n\t\t\ttext: \"Default volume\",\n\t\t\tdefault: 1.0,\n\t\t\tvalue: 1.0,\n\t\t\ttype: \"combo\",\n\t\t\tvalues: [\n\t\t\t\t\"100%\", 1.0,\n\t\t\t\t\"75%\", 0.75,\n\t\t\t\t\"50%\", 0.50,\n\t\t\t\t\"25%\", 0.25,\n\t\t\t\t\"0% (muted)\", 0.0\n\t\t\t],\n\t\t},\n\t\t\"pause_on_click\": {\n\t\t\ttext: \"Play/pause the video by clicking on it\",\n\t\t\tdefault: true,\n\t\t\tvalue: true\n\t\t},\n\t\t\"loop\": {\n\t\t\ttext: \"Loop by default\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t},\n\t\t\"use_hd\": {\n\t\t\ttext: \"Use HD videos where available\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t},\n\t\t\"background_color\": {\n\t\t\ttext: \"Background color (what is this?)\",\n\t\t\ttype: \"text\",\n\t\t\tdefault: \"#000000\",\n\t\t\tvalue: \"#000000\"\n\t\t},\n\t\t\"disable_preload\": {\n\t\t\ttext: \"Disable video preloading (may save data)\",\n\t\t\tdefault: false,\n\t\t\tvalue: false\n\t\t},\n\t},\n\n\trunning: false,\n\n\trun: function() {\n\t\tthis.running = true;\n\n\t\tif (this.preferences.background_color.value === \"\") {\n\t\t\tthis.preferences.background_color.value = \"#000000\";\n\t\t}\n\n\t\tif (XKit.page.react) {\n\t\t\tXKit.tools.add_css(\".xkit-vanilla-video ~ * {display: none !important;}\");\n\t\t\tXKit.post_listener.add('vanilla_video', this.replace_players);\n\t\t\tthis.replace_players();\n\t\t\treturn;\n\t\t}\n\n\t\tXKit.post_listener.add('vanilla_video', function() { setTimeout(XKit.extensions.vanilla_video.check, 10); });\n\t\tXKit.extensions.vanilla_video.check();\n\t},\n\n\treplace_players: function() {\n\t\tconst {preferences} = XKit.extensions.vanilla_video;\n\n\t\t$(\"video:not(.xkit-vanilla-video-done):not(.xkit-vanilla-video)\").each(function() {\n\t\t\tconst $this = $(this);\n\t\t\tconst $newPlayer = $this.clone();\n\t\t\tconst $parent = $this.parent();\n\n\t\t\t$this.addClass('xkit-vanilla-video-done');\n\n\t\t\t$newPlayer\n\t\t\t.addClass(\"xkit-vanilla-video\")\n\t\t\t.css({\n\t\t\t\t\"cursor\": \"auto\",\n\t\t\t\t\"background-color\": preferences.background_color.value,\n\t\t\t})\n\t\t\t.attr({\n\t\t\t\t\"controls\": true,\n\t\t\t\t\"loop\": preferences.loop.value ? \"true\" : null,\n\t\t\t\t\"preload\": preferences.disable_preload.value ? \"none\" : null,\n\t\t\t});\n\n\t\t\t$newPlayer[0].volume = preferences.default_volume.value;\n\t\t\t$newPlayer[0].pause();\n\t\t\t$newPlayer[0].currentTime = 0;\n\n\t\t\t$parent.prepend($newPlayer);\n\t\t});\n\t},\n\n\tcpanel: function() {\n\t\t$(\"#xkit-vanilla-video-color-help\").click(function() {\n\t\t\tXKit.window.show(\"Background color\", \"The Vanilla Videos extension allows you to set the background color used when videos do not fill the whole player, generally due to being very narrow. Any CSS color value works, for example:
#000000
#FF0000
rgba(0, 0, 0, 0)
These would produce black, red, and transparent respectively.
Please be careful while customizing the color. An improper value can cause issues. In that case, just delete the text you've entered completely and XKit will revert to the default color.\", \"info\", \"
OK
\");\n\t\t});\n\t},\n\n\tcheck: function() {\n\t\tvar doneClass = 'xvanilla_video-done';\n\t\t$('.posts .post').not('.' + doneClass).each(function() {\n\t\t\tvar post = $(this);\n\t\t\tpost.addClass(doneClass);\n\t\t\tvar videoEmbeds = post.find('.dockable_video_embed').add('.crt-video');\n\t\t\tvideoEmbeds.each(function() {\n\t\t\t\tvar videoEmbed = $(this);\n\t\t\t\tif (videoEmbed.attr('data-embed-service') !== 'tumblr_video' && !videoEmbed.hasClass('crt-video')) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar sources = videoEmbed.find('video > source');\n\t\t\t\tvar newVideo = document.createElement('video');\n\t\t\t\tsources.each(function() {\n\t\t\t\t\tvar origVideo = this.parentElement;\n\t\t\t\t\tvar clonedSource = document.createElement('source');\n\t\t\t\t\tclonedSource.type = this.type;\n\t\t\t\t\tclonedSource.src = this.src;\n\t\t\t\t\tif (XKit.extensions.vanilla_video.preferences.use_hd.value) {\n\t\t\t\t\t\tclonedSource.src = clonedSource.src.replace(/\\/480$/, \"\");\n\t\t\t\t\t}\n\t\t\t\t\tnewVideo.poster = origVideo.poster;\n\t\t\t\t\tnewVideo.appendChild(clonedSource);\n\t\t\t\t});\n\t\t\t\tif ($(newVideo).find(\"source\").length === 0) {\n\t\t\t\t\t// remove doneClass?\n\t\t\t\t\treturn; // FIXME sometimes a page ends up with all broken videos (missing source) - not sure why. haven't seen it since I added this but might just be a coincidence\n\t\t\t\t}\n\t\t\t\tnewVideo.controls = true;\n\t\t\t\tnewVideo.style = \"width: 100%;\" +\n\t\t\t\t\t\t\t\t \"display: block;\" +\n\t\t\t\t\t\t\t\t \"margin: auto;\" +\n\t\t\t\t\t\t\t\t \"max-height: 600px;\" +\n\t\t\t\t\t\t\t\t \"background: \" + XKit.extensions.vanilla_video.preferences.background_color.value + \";\";\n\t\t\t\tnewVideo.volume = XKit.extensions.vanilla_video.preferences.default_volume.value;\n\t\t\t\tnewVideo.loop = XKit.extensions.vanilla_video.preferences.loop.value;\n\t\t\t\tif (XKit.extensions.vanilla_video.preferences.disable_preload.value) {\n\t\t\t\t\tnewVideo.preload = \"none\";\n\t\t\t\t}\n\t\t\t\tif (XKit.extensions.vanilla_video.preferences.pause_on_click.value) {\n\t\t\t\t\tnewVideo.addEventListener(\"click\", function() { this.paused ? this.play() : this.pause(); });\n\t\t\t\t}\n\t\t\t\tvideoEmbed.replaceWith(newVideo);\n\t\t\t});\n\t\t});\n\t},\n\n\tdestroy: function() {\n\t\tthis.running = false;\n\t\tXKit.tools.remove_css('vanilla_video');\n\t\tXKit.post_listener.remove('vanilla_video');\n\t\t$('.xkit-vanilla-video').remove();\n\t\t$('.xkit-vanilla-video-done').removeClass('xkit-vanilla-video-done');\n\t}\n};\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,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","title":"Vanilla Videos","description":"Make the video player unexciting","developer":"new-xkit","version":"1.0.1","details":"Use the browser's native video controls. Only affects Tumblr's player.","frame":"false","beta":"true","slow":"true"}
\ No newline at end of file
diff --git a/Extensions/dist/video_downloader.json b/Extensions/dist/video_downloader.json
new file mode 100644
index 000000000..bd734aabb
--- /dev/null
+++ b/Extensions/dist/video_downloader.json
@@ -0,0 +1 @@
+{"id":"video_downloader","script":"//* TITLE Video Downloader **//\n//* VERSION 1.0.0 **//\n//* DESCRIPTION Adds a download button to the video player **//\n//* DETAILS Adds a simple download button to all videos using the fancy player. Does not support 3rd-party players or the native player. Disabled on beta dash (now supported natively) **//\n//* DEVELOPER tlitookilakin **//\n//* FRAME false **//\n//* BETA false **//\nXKit.extensions.video_downloader = new Object({\n\n\trunning: false,\n\n\trun: function() {\n\t\tthis.running = true;\n\t\tif (!XKit.interface.is_tumblr_page() || XKit.page.react) {\n\t\t\treturn;\n\t\t}\n\t\tXKit.tools.init_css(\"video_downloader\");\n\t\tXKit.extensions.video_downloader.addButtons();\n\t\tXKit.post_listener.add(\"video_downloader\", XKit.extensions.video_downloader.addButtons);\n\t},\n\n\tdestroy: function() {\n\t\tXKit.post_listener.remove(\"video_downloader\");\n\t\tthis.running = false;\n\t},\n\t\n\tmakeButton: function(url) {\n\t\tvar el = document.createElement(\"a\");\n\t\tvar filename = url.split(\"/\").pop();\n\t\tel.classList.add(\"xvd-button\");\n\t\tel.setAttribute(\"href\", url);\n\t\tel.setAttribute(\"target\", \"_blank\");\n\t\tel.setAttribute(\"download\", filename);\n\t\tel.innerText = \"Download this video\";\n\t\treturn el;\n\t},\n\t\n\taddButtons: function() {\n\t\tsetTimeout(function() {\n\t\t\tvar vids = document.querySelectorAll(\".crt-video:not(.xvd-processed)\");\n\t\t\tfor (var vid of vids) {\n\t\t\t\tvid.classList.add(\"xvd-processed\");\n\t\t\t\tvar sauce = vid.getElementsByTagName(\"source\");\n\t\t\t\tif (sauce.length > 0) {\n\t\t\t\t\tvar src = sauce[0].getAttribute(\"src\");\n\t\t\t\t\tvar button = XKit.extensions.video_downloader.makeButton(src);\n\t\t\t\t\tvid.appendChild(button);\n\t\t\t\t}\n\t\t\t}\n\t\t}, 1500);\n\t}\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAEsmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjY0IgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iNjQiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSIKICAgdGlmZjpJbWFnZVdpZHRoPSI2NCIKICAgdGlmZjpJbWFnZUxlbmd0aD0iNjQiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjcyLjAiCiAgIHRpZmY6WVJlc29sdXRpb249IjcyLjAiCiAgIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiCiAgIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIKICAgeG1wOk1vZGlmeURhdGU9IjIwMjAtMDMt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","css":".xvd-button {\n\tposition: absolute;\n\ttop: 2px;\n\tleft: 2px;\n\tdisplay: block;\n\toverflow: hidden;\n\theight: 32px;\n\twidth: 32px;\n\tmargin: 0px;\n\tpadding: 0px;\n\tpadding-left: 32px;\n\tbackground-image: none !important;\n\tz-index: 2;\n\tborder-radius: 6px;\n\topacity: .5;\n\ttransition: background-color .2s, opacity .2s;\n}\n.xvd-button:hover, .xvd-button:focus {\n\tbackground-color: rgba(0,0,0,.25);\n\topacity: 1;\n}\n.xvd-button::before {\n\tcontent: \"\";\n\tposition: absolute;\n\twidth: 32px;\n\theight: 32px;\n\tdisplay: block;\n\tleft: 0px;\n\tbackground-image: url(\"/images/dashboard_master_sprite.png\") !important;\n\tbackground-position: -237px -106px !important;\n\tbackground-size: 393px !important;\n\ttransform: scale(-1);\n}\n","title":"Video Downloader","description":"Adds a download button to the video player","developer":"tlitookilakin","version":"1.0.0","details":"Adds a simple download button to all videos using the fancy player. Does not support 3rd-party players or the native player. Disabled on beta dash (now supported natively)","frame":"false","beta":"false","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/view_my_tags.json b/Extensions/dist/view_my_tags.json
new file mode 100644
index 000000000..cb69f309b
--- /dev/null
+++ b/Extensions/dist/view_my_tags.json
@@ -0,0 +1 @@
+{"id":"view_my_tags","script":"//* TITLE View My Tags **//\n//* VERSION 0.4.5 **//\n//* DESCRIPTION Lets you view your recently used tags **//\n//* DEVELOPER STUDIOXENIX **//\n//* FRAME false **//\n//* BETA false **//\n\nXKit.extensions.view_my_tags = new Object({\n\n\trunning: false,\n\tapiKey: XKit.api_key,\n\turl: \"\",\n\n\tbutton_icon: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OEY5QzJBRTkzRTlGMTFFM0JFOUNFQjdCODYyOTc5RjMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OEY5QzJBRUEzRTlGMTFFM0JFOUNFQjdCODYyOTc5RjMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4RjlDMkFFNzNFOUYxMUUzQkU5Q0VCN0I4NjI5NzlGMyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4RjlDMkFFODNFOUYxMUUzQkU5Q0VCN0I4NjI5NzlGMyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pr7xRK4AAAFxSURBVHjarJQ7SwNBFIV3fTXughYWglYBQVCxsTadf8NebASxNYW92vgPtBZsBBs7A5pGC58gsUkRQsDga43ruXAGJpM7u1Ey8GXuZGZOzp07kzBN06CfbSDocxsyQRiGeVZjZNP6i8PvnLUX+NEo16KcIc/xTYYUPgRXHNvcgsjs0dAEt8EwmBJXiugd01cFtaK8YiJBXwM/yvwMKHvTVxzWwR44UdzZ3Ej6XTqW4Ke1OHHGPh4kfZ9gqweB1FOoWBNc55llbW5npB+7gtLO/unSVD/qvkdBMAE+wCU4Bu+gyu/ajH1Oj+ynV2S4CGbBCpgEG2AeXIMGWAbnvA3utUtsZ/LRBM+MG+wr7MVZiXGBjm13j2DEFdwFRcZj4IkbKyxYlU9z1BG7FzHtpTSd+IUvZk1OBUyDHbBvrROxOfDV8feV0eQIyizEILOoc04qu2DE3KeX1Q6slJc6ronzjHsVXAVbYBycgk1XzAj+CjAAVzNAhdtS9LcAAAAASUVORK5CYII=\",\n\n\tpreferences: {\n\t\t\"sep0\": {\n\t\t\ttext: \"Options\",\n\t\t\ttype: \"separator\"\n\t\t},\n\t\t\"only_in_post_window\": {\n\t\t\ttext: \"Only show View My Tags button when I'm creating/editing a post\",\n\t\t\tvalue: false,\n\t\t\tdefault: false\n\t\t},\n\t\t\"sort_by_az\": {\n\t\t\ttext: \"Sort my tags alphabetically\",\n\t\t\tvalue: true,\n\t\t\tdefault: true\n\t\t},\n\t},\n\n\trun: function() {\n\t\tthis.running = true;\n\t\tif ($(\"#post_controls_avatar\").length === 1) {\n\t\t\t// For now, this will only work on pages where the user's avatar is visible\n\t\t\tthis.url = $(\"#post_controls_avatar\").attr(\"href\").replace(/https?:\\/\\//, '').replace(/\\//g, '');\n\t\t}\n\n\t\t$(\"body\").append(\"\");\n\n\t\tXKit.tools.init_css(\"view_my_tags\");\n\n\t\tXKit.interface.post_window.create_control_button(\"xkit-view-my-tags-window\", this.button_icon, \"View my Tags\");\n\t\tXKit.interface.post_window_listener.add(\"view_my_tags\", XKit.extensions.view_my_tags.post_window);\n\t\t$(document).on(\"click\", \".xkit-view-my-tags-window\", XKit.extensions.view_my_tags.post_window_icon);\n\n\t\tif (XKit.extensions.view_my_tags.url !== \"\") {\n\t\t\tvar api_url = \"https://api.tumblr.com/v2/blog/\" + XKit.extensions.view_my_tags.url + \"/posts?api_key=\" + XKit.extensions.view_my_tags.apiKey + \"&limit=20\";\n\n\t\t\tGM_xmlhttpRequest({\n\t\t\t\tmethod: \"GET\",\n\t\t\t\turl: api_url,\n\t\t\t\tjson: true,\n\t\t\t\tonload: function(response) {\n\t\t\t\t\tvar data = JSON.parse(response.responseText);\n\t\t\t\t\tvar user_tags_array = [];\n\t\t\t\t\tvar user_tags_hashmap = {};\n\t\t\t\t\tdata.response.posts.forEach(function(post) {\n\t\t\t\t\t\tpost.tags.forEach(function(tag) {\n\t\t\t\t\t\t\tif (!user_tags_hashmap.hasOwnProperty(tag)) {\n\t\t\t\t\t\t\t\tuser_tags_array.push(tag);\n\t\t\t\t\t\t\t\tuser_tags_hashmap[tag] = 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\t$(\"#xkit-view-my-tags-data\").html(JSON.stringify(user_tags_array));\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tvar xf_html = '
\";\n\n\t\t\tXKit.window.show(\"View My Tags\", m_html, \"info\", \"
Close
\");\n\n\t\t\t$(\"body\").css(\"overflow\", \"hidden\");\n\n\t\t\t$(\"#view-my-tags-window-outer\").nanoScroller();\n\n\t\t\t$(\"#xkit-close-message-view-my-tags\").click(function() {\n\n\t\t\t\t$(\"body\").css(\"overflow\", \"auto\");\n\t\t\t\tXKit.window.close();\n\n\t\t\t});\n\n\t\t\t$(\"#xkit-view-my-tags-search\").keyup(function() {\n\n\t\t\t\tvar m_value = $(this).val().toLowerCase();\n\t\t\t\tm_value = $.trim(m_value);\n\t\t\t\tif (m_value === \"\") {\n\t\t\t\t\t$(\".xkit-view-my-tags-tag\").removeClass(\"xkit-view-tags-hidden\");\n\t\t\t\t}\n\n\t\t\t\t$(\".xkit-view-my-tags-tag\").each(function() {\n\n\t\t\t\t\tif ($(this).html().toLowerCase().indexOf(m_value) !== -1) {\n\n\t\t\t\t\t\t$(this).removeClass(\"xkit-view-tags-hidden\");\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t$(this).addClass(\"xkit-view-tags-hidden\");\n\n\t\t\t\t\t}\n\n\t\t\t\t});\n\n\t\t\t\t$(\"#view-my-tags-window-outer\").nanoScroller();\n\n\t\t\t});\n\n\t\t\t$(\".xkit-view-my-tags-tag.xkit-with-ability-to-add-to-the-window-hoorray\").click(function() {\n\n\t\t\t\tif ($(this).hasClass(\"xkit-view-tags-green\")) {\n\n\t\t\t\t\tXKit.interface.post_window.remove_tag($(this).attr('data-the-tag'));\n\t\t\t\t\t$(this).removeClass(\"xkit-view-tags-green\");\n\n\t\t\t\t} else {\n\n\t\t\t\t\tXKit.interface.post_window.add_tag($(this).attr('data-the-tag'));\n\t\t\t\t\t$(this).addClass(\"xkit-view-tags-green\");\n\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t} catch (e) {\n\n\t\t\tXKit.extensions.view_my_tags.show_error(\"VMT-510: \" + e.message);\n\n\t\t}\n\n\t},\n\n\tshow_error: function(error_code) {\n\n\t\tXKit.window.show(\"Unable to retrieve tags\", \"View My Tags were unable to retrieve your latest tags. Please try again later.
Error Code: \" + error_code, \"error\", \"
OK
\");\n\n\t},\n\n\tdestroy: function() {\n\t\tthis.running = false;\n\t\t$(\"#view_my_tags_ul\").remove();\n\t\t$(\"#view_my_tags_view\").remove();\n\t\tXKit.interface.post_window_listener.remove(\"view_my_tags\");\n\t}\n\n});\n","file":"found","server":"up","errors":false,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpGNzdGMTE3NDA3MjA2ODExODA4MzkyMjM2MzU5MTQ4NCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCNzU1MTEyMzNFQUIxMUUzQkU5Q0VCN0I4NjI5NzlGMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCNzU1MTEyMjNFQUIxMUUzQkU5Q0VCN0I4NjI5NzlGMyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjAxODAxMTc0MDcyMDY4MTFBRTczREVDNEM5OEM0RTE5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkY3N0YxMTc0MDcyMDY4MTE4MDgzOTIyMzYzNTkxNDg0Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+ot/PDAAABcFJREFUeNrsWm1MW1UYfu5tKVCgUGBFtrFB3IAM3A8/thjj1Bjj54zxh/40+mOJuiX+cMaYTRPd4i9NmFHnNDOa/TVZ3KYobi5uy/xC5xAZDBkt6Bz9oNBSSumH79vbe9vy0fZCL6WBkxM4vL3n3Pc5z/t1ThG+MUWQz00PIa/1h4g8b3ohzxnIexPS57sR5T8DAlYZWAWwwn1ghTCw4y/VS9uOwPo+ItPLIw8UVKheev0z8NkwcjxvfaCwBs0HQOtrikEvaJmJibemNyFEMHIib0sJgxlNB0BnDvupZcaA/zrcPyMSQmEtKu9Mw0PzQTZV+9fLBoC3D7374fmNx7oSbHgBG3elxFCOpoP0KBxfLQMAYT/634b3EqS54UlY25iEslvSYGh+C72E4VSuAQR9GP8RSRPDuPFlGgD8MhMa34BAGE7mPIzOmqUvzywulWPzPpBTZ8uW9LQfqueUwPIE7CeStK9+IOPYKmEQ4GzPURgVC9HwEkJ+jHciPIWiOtQ9h9ImdfmhcT/6InB25CgKFVrQ8i5cFxHywrSVk67qF5M/vI4+Ea6OJWdAaanDf0YY9uGquCgeFuID2QyCJmx+DaIejm/z9kBDGG5+hX16YRi0LeZUYNjLsdV5WjsGwtpeQyo8qMWQqQ/8dxw3PbkkPACusxpEIesRCAbUPLYkGEQVGDJlIBKA9UOmuOZRzTFs2osBPZzfZ9uJI1OwHeYazvKwthh0pZzpBX1G/qAukVHhMPge82B5SGMeylC/G5FIeltSn8gisH7Av5cAQ8Nujn6jF7KeB0JsS/TTEvUH7xVMu6NFXhFMrUw9Nd/fXO3pjDA2JIH39vIptMCMorUZ+cOGXXBfTG1CCyolImHYPob/BpsTnXTpjCa1qvth3IDpMXbBoJcr58p7Yd6Gkk1wnMHEVbjOIRzgArbyLuaQVEzdfINIraHwy+Oaf0tZUAVjPcY6Z8pLtnDyMpjnnTj2OwbbMD2a2oT0aV5f+3RsQJtasQ2lLXygmbLDdQaebhgsnByK6/kBEg4fRWgCxQ38pNRGTiI4hvE/2LTKWlDaGrXBCZb7+hDyAPMAoCmDhxD0ILWG6UuJtU/FBqSTsT42LgMbxtCnqHuWDT1R2PU8Qr74rIA9HtHX7IT5Dh44zsqHUnFe7Qfe4XXSqicSvtRdaaQ9rThplaO1EfUv8s8pB3dFWLMT0y64f5Vhb4+tQ8dOSXtq9vYoIa0omMsHPF24dohdJa1uAmcBAWm63Ej1P/eg51UMfR4XXv8C3Xu4e3tkHlp4VhzA7XxxRJJyWXtCy7sgYM0jczjx+GUMtMl7n0EXKQ+k7kpznuNERhL/UFzoOh97TAHAkUGH0fNRJRQSdKhI3H4dp9vZ7kt7TwULxbS0WildDQO2OYQBxyyh/KdbDjvlURIqbpNjSyd/Wrkj7lGxve/C4GEOvhnuvdRVZGJKedLDibkvPl2YKXR0oOruKAO3wnuPfCd5hcMiPVBUC6EgYe+7ObFQdFJbGajIxAxAnAVAHgsJDEhC/zACThiqonXHg7LJXeBPSxrjFiVpb/2ILzgWUBZkj4EEJIrQ/h3WRdOIBCM8Cc/l6Pav5ySdqD19tLDrBZFfnLonXidKEiFpgRRCCueJzX2JCySxGEXrZIvqge0Tjg3p1Zinq6lGlaCkm4OBJBOShUE3h0XTVhnAT/yRcSOq75O1PxqLbBpebI3It7Bck4ixgSJUpnv7gahwypXEW8AVH0z0M3iq5GLaf4bQ5GLvCtI78Uj7TJdlAO0znZjqZ+qK0FDJ4V9XDPP2hO0XOfZTqqZYNHwMYR8Wf6mj1b2QoTrp5Enb7/yB1SVIVB39cywaMbPxas2+5EtYljIrlX1s6waUbmGvDfqydsskdL+syXmAdlo6c5GV+//V8uSpEQOhKUxcm4ON7AMQc3o7nQUAQt7/z5y4ykCOAehWTWjVhFa0Cf0vwACDH8JmHvs/DwAAAABJRU5ErkJggg==","css":"#xkit-view-my-tags-data { display: none; }\n\n#view_my_tags_view:after {\n\tbackground: no-repeat 0px 45% url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Qjc1NTExMjYzRUFCMTFFM0JFOUNFQjdCODYyOTc5RjMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Qjc1NTExMjczRUFCMTFFM0JFOUNFQjdCODYyOTc5RjMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCNzU1MTEyNDNFQUIxMUUzQkU5Q0VCN0I4NjI5NzlGMyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCNzU1MTEyNTNFQUIxMUUzQkU5Q0VCN0I4NjI5NzlGMyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PjwONR8AAAF7SURBVHjarJS/LwRBFMd3uAvHid+JhIjyJDrREaVWwSkVSv+RloSImoZIVAoNIXK5QoFChPh53MlZn9m8lcmYNUtuk0/e3NzsN2+/771RYRgGjXyaggY/GWO97Dm7opT6+EuGn56zc9iT/Y+gNrUMt9bZHij6RF0eHsEubMON9V+XT9QlWMMrnW1Fsg0covNJohnH3jiHO4idMJCQSLd4ukWMCkUSPzJUElthDIY8/mtPFyCbpsp6vzlF2+mvKJqipuBhCoEkT79byhQ8gSuPoPrl86Pqq3iWY1P5nSMswj28wDC8QU4SeIX2BPGyMi6HQYl9cCFCbVCCXriDdzl3DUsO0ZLZNrO6B6EKkxJbYAT6JdtzmIA1KaJZuEfYtxtbv7An61V4En/0GOZhVApTscQeYB3b6rZgzVhXJSv98oHs5WU0pyyxDainvQ+fZaZjs4+h4BKLipvyxp6W6dEZ7+hZFrHNePTiTkkrWJCKn8EMXMKpKRYLfgkwAB/Kd6TsaEyuAAAAAElFTkSuQmCC) !important;\n\tcontent: \"\\54\";\n\tfont-size: 0;\n\tline-height: 37px;\n\twidth: 20px;\n}\n\n#view-my-tags-window-outer {\n\theight: 230px;\n\tborder: 1px solid rgb(190,190,190);\n}\n\n.xkit-window-buttons {\n\tpadding-right: 5px !important;\n\tposition: relative;\n}\n\n.xkit-view-tags-hidden {\n\tdisplay: none;\n}\n\n#xkit-view-my-tags-search {\n\tdisplay: inline-block !important;\n\tposition: absolute !important;\n\twidth: 200px !important;\n\ttop: 1px !important;\n\tright: 10px !important;\n\theight: 28px !important;\n}\n\n.xkit-view-my-tags-tag {\n\tborder-bottom: 1px solid rgb(190,190,190);\n\tpadding: 5px 10px 5px 30px;\n\tfont-size: 13px;\n\tcolor: rgb(100,100,100);\n\tbackground: no-repeat 10px 50% url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OUE5QjQwNjM0MDIzMTFFM0I3QjRGNERGODZCRDlCN0MiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OUE5QjQwNjQ0MDIzMTFFM0I3QjRGNERGODZCRDlCN0MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo5QTlCNDA2MTQwMjMxMUUzQjdCNEY0REY4NkJEOUI3QyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo5QTlCNDA2MjQwMjMxMUUzQjdCNEY0REY4NkJEOUI3QyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pnn83d4AAAC4SURBVHjaYvz//z8DOYAFRKSmpmLT/R2IfYB4HzaNTHgM5QTiLUDsRIzGCUCsAKXxasbQOHv27IdIGnFqRtdYAPSvPIjG4Wx7dI3fYRqB+AEWjTDN22GaYRp9kDQzEBFgQmCNQH/tI1LzXyBOB+J3cD8SofkfEEcD8TK4U4EBQkgzSNNkIF4JE2AEJTmYRiRgDw0ITqjzQDatBBpMMOUcBGJPIP4CxHHINqGkVTyaQXH6DpskQIABAEopOUx68I3CAAAAAElFTkSuQmCC);\n}\n\n.xkit-view-my-tags-tag:last-child {\n\tborder-bottom: 0;\n}\n\n.xkit-view-my-tags-tag.xkit-with-ability-to-add-to-the-window-hoorray {\n\tcursor: pointer;\n\tcolor: rgb(130,130,130);\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6M0E5M0NCODA0MDkwMTFFM0I3QjRGNERGODZCRDlCN0MiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6M0E5M0NCODE0MDkwMTFFM0I3QjRGNERGODZCRDlCN0MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozQTkzQ0I3RTQwOTAxMUUzQjdCNEY0REY4NkJEOUI3QyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDozQTkzQ0I3RjQwOTAxMUUzQjdCNEY0REY4NkJEOUI3QyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PtTcm7wAAABDSURBVHjaYvz//z8DOYCRYo2pqanocjATGZEFZ8+eDaaZGMgE9NfIgsVPuPzKgOxnqtjISEyoDlzgkK2Rke5pFSDAAMwOFg3fpDNOAAAAAElFTkSuQmCC);\n}\n\n.xkit-view-my-tags-tag.xkit-with-ability-to-add-to-the-window-hoorray:hover {\n\tbackground-color: rgb(245,245,245);\n\tcolor: rgb(60,60,60);\n}\n\n.xkit-view-my-tags-tag.xkit-view-tags-green {\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6M0E5M0NCODQ0MDkwMTFFM0I3QjRGNERGODZCRDlCN0MiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6M0E5M0NCODU0MDkwMTFFM0I3QjRGNERGODZCRDlCN0MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozQTkzQ0I4MjQwOTAxMUUzQjdCNEY0REY4NkJEOUI3QyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDozQTkzQ0I4MzQwOTAxMUUzQjdCNEY0REY4NkJEOUI3QyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Ph3txE0AAAA7SURBVHjaYvz//z8DOYCJgUxAkkarjgA620gVjSxI7ic2eBkpspEBFI/EYst2fzh7CIUqI93TKkCAAQAliDEh3dfaiAAAAABJRU5ErkJggg==);\n\tbackground-color: #d4f6e2;\n}\n\n.xkit-view-my-tags-tag.xkit-view-tags-green:hover {\n\tbackground-color: #abe1c1;\n}","title":"View My Tags","description":"Lets you view your recently used tags","developer":"STUDIOXENIX","version":"0.4.5","frame":"false","beta":"false","slow":"false"}
\ No newline at end of file
diff --git a/Extensions/dist/xcloud.json b/Extensions/dist/xcloud.json
new file mode 100644
index 000000000..96534f352
--- /dev/null
+++ b/Extensions/dist/xcloud.json
@@ -0,0 +1 @@
+{"id":"xcloud","script":"//* TITLE XCloud **//\n//* VERSION 1.1.3 **//\n//* DESCRIPTION Sync XKit data on clouds, or back up locally **//\n//* DETAILS XCloud stores your XKit configuration on New XKit servers so you can back up your data and synchronize it with other computers and browsers easily.
You can also export your data to a file to import elsewhere. **//\n//* DEVELOPER new-xkit **//\n//* FRAME false **//\n//* BETA false **//\n\nXKit.extensions.xcloud = new Object({\n\n\trunning: false,\n\tusername: \"\",\n\tpassword: \"\",\n\tserver: \"https://cloud.new-xkit.com\",\n\tgallery_available: {},\n\textensions_upgraded: false,\n\n\trun: function() {\n\t\tthis.running = true;\n\n\t\tXKit.tools.init_css(\"xcloud\");\n\t\tthis.load_user_login();\n\t\t$(\"#xkit-cp-tab-xcloud\").css(\"display\", \"block\");\n\t},\n\n\treload_welcome_panel: function() {\n\n\t\t$(\"#xcloud-welcome-panel\").remove();\n\t\t$(\"#xcloud-panel-right\").append(XKit.extensions.xcloud.return_panel_welcome(true));\n\n\n\t},\n\n\treturn_panel_welcome: function(is_reloading) {\n\n\t\tvar m_html = \"\";\n\n\t\tvar m_class = \"current\";\n\t\tif (is_reloading) {\n\t\t\tm_class = \"previous forced\";\n\t\t}\n\n\t\tif (XKit.extensions.xcloud.username === \"\") {\n\t\t\tXKit.extensions.xcloud.useoldserver = false;\n\t\t\tm_html =\t\"
\" +\n\t\t\t\t\t\t\t\"
Welcome to XCloud!
\" +\n\t\t\t\t\t\t\t\"
\" +\n\t\t\t\t\t\t\t\t\"XCloud lets you synchronize your XKit data such as your blacklisted words \" +\n\t\t\t\t\t\t\t\t\"and posts, and your preferences across computers and browsers using XKit servers.\" +\n\t\t\t\t\t\t\t\"
\" +\n\t\t\t\t\t\t\t\t\"Click Sync to upload your XKit settings to your XCloud. \" +\n\t\t\t\t\t\t\t\t\"Click Restore to restore your settings stored on your XCloud. \" +\n\t\t\t\t\t\t\t\"
\" +\n\t\t\t\t\t\t\"Replace your XCloud data with your current XKit configuration. \" +\n\t\t\t\t\t\t\"Depending on your internet connection and the amount of extensions you have installed, this might take several minutes. It is highly recommended that you close other Tumblr tabs and not navigate away from this page.\" +\n\t\t\t\t\t\"
\" +\n\t\t\t\t\t\t\"Replace your XKit configuration with the one on XCloud. \" +\n\t\t\t\t\t\t\"Depending on your internet connection and the amount of extensions you have installed, this might take several minutes. It is highly recommended that you close other Tumblr tabs and not navigate away from this page.\" +\n\t\t\t\t\t\"
\");\n\n\t},\n\n\tworking_off: function() {\n\n\t\t$(\"#xcloud-panel-working\").remove();\n\n\t},\n\n\tpanel_appended: function() {\n\t\tvar xcloud_url = this.server;\n\t\tvar self = this;\n\n\t\tvar aboutButton = $(\"#xcloud-local-about\");\n\t\taboutButton.unbind(\"click\");\n\t\taboutButton.bind(\"click\", function() {\n\t\t\tXKit.window.show(\n\t\t\t\t\"XCloud Local Backups\",\n\n\t\t\t\t\"Local backups allow you to import or export XCloud data as files on your computer. \" +\n\t\t\t\t\"This means you don't even need to sign up to transfer your XKit configuration elsewhere. \" +\n\t\t\t\t\"Additionally, unlike the cloud service, local backups do not limit the amount of data that can be transferred.
\" +\n\t\t\t\t\"Export \" +\n\t\t\t\t\"The Export button will immediately download a file containing your XKit data. \" +\n\t\t\t\t\"This file is not human-readable; it is only for importing to XCloud.
\" +\n\t\t\t\t\"Import \" +\n\t\t\t\t\"The Import button will open a file-open prompt in your browser. If you select an XCloud payload file that you've exported, \" +\n\t\t\t\t\"it will read and restore your settings from it.\",\n\n\t\t\t\t\"info\",\n\n\t\t\t\t'
\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ($(\"#xcloud-login-password\").val().length <= 5) {\n\t\t\t\tXKit.window.show(\"Hey there!\", \"Please enter a password that is at least 6 characters long.\", \"error\", \"
OK
\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tXKit.extensions.xcloud.working_on();\n\n\t\t\tvar registerRequest = {\n\t\t\t\turl: xcloud_url + \"/xcloud/register\",\n\n\t\t\t\tonerror: function() {\n\n\t\t\t\t\tXKit.extensions.xcloud.hide_overlay();\n\t\t\t\t\tXKit.window.show(\"Can't connect to server\", \"XKit was unable to contact XCloud servers. Error code: 1003 Please try again or send a bug report.\", \"error\", \"
OK
\");\n\t\t\t\t\treturn;\n\n\t\t\t\t},\n\t\t\t\tonload: function(response) {\n\t\t\t\t\tXKit.extensions.xcloud.working_off();\n\n\t\t\t\t\tvar mdata = null;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tmdata = JSON.parse(response.responseText);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tXKit.extensions.xcloud.hide_overlay();\n\t\t\t\t\t\tXKit.window.show(\"Can't connect to server\", \"XKit was unable to contact XCloud servers. Error code: 1001 Please try again or send a bug report.\", \"error\", \"
OK
\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (mdata.server_down) {\n\t\t\t\t\t\tXKit.window.show(\"Can't connect to server\", \"XKit was unable to contact XCloud servers. Please try again or send a bug report.\", \"error\", \"
\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ($(\"#xcloud-login-password\").val().length <= 5) {\n\t\t\t\tXKit.window.show(\"Hey there!\", \"Please enter a password that is at least 6 characters long.\", \"error\", \"
OK
\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tXKit.extensions.xcloud.working_on();\n\n\t\t\tvar authorizationRequest = {\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tjson: false,\n\t\t\t\turl: xcloud_url + \"/xcloud/auth\",\n\t\t\t\tonerror: function() {\n\n\t\t\t\t\tXKit.extensions.xcloud.hide_overlay();\n\t\t\t\t\tXKit.window.show(\"Can't connect to server\", \"XKit was unable to contact XCloud servers. Error code: 1003 Please try again or send a bug report.\", \"error\", \"
OK
\");\n\t\t\t\t\treturn;\n\n\t\t\t\t},\n\t\t\t\tonload: function(response) {\n\n\n\n\t\t\t\t\tXKit.extensions.xcloud.working_off();\n\n\t\t\t\t\tvar mdata = null;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tmdata = JSON.parse(response.responseText);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tXKit.extensions.xcloud.hide_overlay();\n\t\t\t\t\t\tXKit.window.show(\"Can't connect to server\", \"XKit was unable to contact XCloud servers. Error code: 1001 Please try again or send a bug report.\", \"error\", \"
OK
\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (mdata.server_down) {\n\t\t\t\t\t\tXKit.window.show(\"Can't connect to server\", \"XKit was unable to contact XCloud servers. Please try again or send a bug report.\", \"error\", \"
\");\n\n\t\t}\n\n\t\t$(\"#xcloud-overlay-background\").animate({ opacity: 1 }, 400);\n\t\t$(\"#xcloud-overlay\").fadeIn('slow');\n\n\t},\n\n\thide_overlay: function() {\n\n\t\t$(\"#xcloud-overlay-background\").fadeOut('fast');\n\t\t$(\"#xcloud-overlay\").fadeOut('slow', function() { $(this).remove(); $(\"#xcloud-overlay-background\").remove(); });\n\n\t},\n\n\tstart_fetch: function() {\n\t\tvar xcloud_url = this.server;\n\t\tXKit.extensions.xcloud.show_overlay(true);\n\n\t\tvar m_username = XKit.extensions.xcloud.username;\n\t\tvar m_password = XKit.extensions.xcloud.password;\n\n\t\tvar fetchRequest = {\n\t\t\tmethod: \"GET\",\n\t\t\turl: xcloud_url + \"/xcloud/fetch\",\n\t\t\tjson: false,\n\t\t\tonerror: function() {\n\n\t\t\t\tXKit.extensions.xcloud.hide_overlay();\n\t\t\t\tXKit.window.show(\"Can't connect to server\", \"XKit was unable to contact XCloud servers. Error code: 1003 Please try again or send a bug report.\", \"error\", \"
OK
\");\n\t\t\t\treturn;\n\n\t\t\t},\n\t\t\tonload: function(response) {\n\n\t\t\t\tvar data = JSON.parse(response.responseText);\n\t\t\t\tif (data.server_down) {\n\t\t\t\t\tXKit.extensions.xcloud.hide_overlay();\n\t\t\t\t\tXKit.window.show(\"Can't connect to server\", \"XKit was unable to contact XCloud servers. Please try again or send a bug report.\", \"error\", \"
OK
\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (data.errors === \"false\") {\n\t\t\t\t\tXKit.extensions.xcloud.process_restore(data);\n\n\t\t\t\t} else {\n\n\t\t\t\t\tXKit.extensions.xcloud.hide_overlay();\n\t\t\t\t\tvar err_desc = \"\";\n\t\t\t\t\tif (data.error_code === \"102\") {\n\t\t\t\t\t\terr_desc = \" Usernames can only have letters and numbers.\";\n\t\t\t\t\t}\n\t\t\t\t\tif (data.error_code === \"202\") {\n\t\t\t\t\t\terr_desc = \" Please enter a password.\";\n\t\t\t\t\t}\n\t\t\t\t\tif (data.error_code === \"100\") {\n\t\t\t\t\t\terr_desc = \" Please pick another username.\";\n\t\t\t\t\t}\n\t\t\t\t\tif (data.error_code === \"800\") {\n\t\t\t\t\t\terr_desc = \" Click Sync from XCloud menu to synchronize your data with XCloud servers before restoring.\";\n\t\t\t\t\t}\n\n\t\t\t\t\tXKit.extensions.xcloud.change_panel_back();\n\t\t\t\t\tXKit.window.show(\"Unable to restore\", \"\" + data.error_str + \" (code: \" + data.error_code + \")\" + err_desc, \"error\", \"
OK
\");\n\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (XKit.extensions.xcloud.useoldserver) {\n\t\t\tfetchRequest.url += \"?username=\" + m_username + \"&password=\" + m_password;\n\t\t} else {\n\t\t\tfetchRequest.headers = {\"Authorization\": \"Basic \" + btoa(m_username + \":\" + m_password), \"Content-Type\": \"application/json\" };\n\t\t\tfetchRequest.json = true;\n\t\t}\n\n\n\t\tGM_xmlhttpRequest(fetchRequest);\n\n\t},\n\n\textensions_to_download: [],\n\textensions_to_download_enabled: [],\n\textensions_to_download_count: 0,\n\terrors_list: [],\n\n\tprocess_restore: function(mdata) {\n\n\t\tvar m_obj = null;\n\t\ttry {\n\t\t\tmdata.data = mdata.data.substring(3, mdata.data.length - 3);\n\t\t\tm_obj = JSON.parse(XKit.extensions.xcloud.base64_decode(mdata.data));\n\t\t} catch (e) {\n\t\t\tXKit.extensions.xcloud.process_error(\"Unable to parse JSON\");\n\t\t\tthis.hide_overlay();\n\t\t\treturn;\n\t\t}\n\n\n\n\t\tif (m_obj.identifier !== \"XCLOUD\") {\n\t\t\tXKit.extensions.xcloud.process_error(\"Invalid Identifier\");\n\t\t\tthis.hide_overlay();\n\t\t\treturn;\n\t\t}\n\n\t\t$(\"#xcloud-overlay-title\").html(\"Restoring settings...\");\n\n\t\tXKit.extensions.xcloud.errors_list = [];\n\t\tXKit.extensions.xcloud.extensions_to_download = [];\n\t\tXKit.extensions.xcloud.extensions_to_download_enabled = [];\n\t\tXKit.extensions.xcloud.extensions_to_download_count = 0;\n\n\t\tvar m_installed = XKit.installed.list();\n\t\tvar full_list = [];\n\n\t\tfor (var ext in m_obj.settings) {\n\n\t\t\tvar mext = m_obj.settings[ext];\n\n\t\t\tvar extension_name = mext.extension;\n\n\t\t\tconsole.log(\"Restoring settings of \" + extension_name);\n\n\t\t\tvar extension_settings = {};\n\t\t\ttry {\n\t\t\t\t//Check if the payloads is using utf8.\n\t\t\t\tif (m_obj.use_utf8) {\n\t\t\t\t\textension_settings = JSON.parse(XKit.extensions.xcloud.b64_to_utf8(mext.preferences));\n\t\t\t\t} else {\n\t\t\t\t\textension_settings = JSON.parse(XKit.extensions.xcloud.base64_decode(mext.preferences));\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tXKit.extensions.xcloud.errors_list.push(\"Unable to restore settings of \" + extension_name);\n\t\t\t}\n\t\t\tvar extension_enabled = mext.enabled;\n\n\t\t\tvar install_this = false;\n\n\t\t\tif (m_installed.indexOf(extension_name) == -1) {\n\t\t\t\tinstall_this = true;\n\t\t\t}\n\n\t\t\tif (install_this) {\n\t\t\t\tconsole.log(\" |-- Need to install \" + extension_name);\n\t\t\t\tXKit.extensions.xcloud.extensions_to_download.push(extension_name);\n\t\t\t\tXKit.extensions.xcloud.extensions_to_download_enabled.push(extension_enabled);\n\t\t\t} else {\n\t\t\t\tconsole.log(\" |-- Skipping \" + extension_name + \", already installed.\");\n\t\t\t}\n\n\t\t\tfull_list.push(extension_name);\n\n\n\t\t\tif (extension_name !== \"xcloud\") {\n\t\t\t\tXKit.tools.set_setting(\"xkit_extension_storage__\" + extension_name, JSON.stringify(extension_settings));\n\t\t\t}\n\n\t\t}\n\n\t\tfor (var i = 0; i < m_installed.length; i++) {\n\n\t\t\tif (m_installed[i].substring(0, 5) === \"xkit_\") { continue; }\n\t\t\tif (full_list.indexOf(m_installed[i]) == -1) {\n\n\t\t\t\tXKit.installed.remove(m_installed[i]);\n\t\t\t\tXKit.storage.clear(m_installed[i]);\n\t\t\t\tconsole.log(\"Removed \" + m_installed[i]);\n\n\t\t\t}\n\n\t\t}\n\n\n\n\t\t$(\"#xcloud-overlay-title\").html(\"Restoring extensions...\");\n\t\t$(\"#xcloud-overlay-message\").html(XKit.progress.add(\"xcloud-restore-process\"));\n\n\n\t\t//Grab the gallery to check available extensions.\n\t\t//We want to exclude unavailable extensions since the install script will make the whole thing partially succeed.\n\t\tXKit.download.page('gallery.php', function(gallery_json) {\n\t\t\tif (gallery_json.errors) {\n\t\t\t\tXKit.extensions.xcloud.hide_overlay();\n\t\t\t\tXKit.window.show(\"Could not restore\", \"Couldn't download extension data from the XKit servers.
\");\n\t},\n\n\tcreate_export_data: function(limit_data) {\n\n\t\tXKit.extensions.xcloud.show_overlay();\n\n\t\t// Get list of installed extensions:\n\t\tvar installed = XKit.installed.list();\n\n\t\tvar to_send = {};\n\t\tto_send.settings = [];\n\n\t\tvar skipping = [];\n\t\tvar skipping_size = [];\n\n\t\tfor (var i = 0; i < installed.length; i++) {\n\n\t\t\t// Skip internal extensions.\n\t\t\tif (installed[i].substring(0, 5) === \"xkit_\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\n\t\t\tvar m_data;\n\n\t\t\t//XCloud data was being pushed up with user's md5 hash which is kind of a security issue.\n\t\t\t//\tInstead we'll just not upload the XCloud extension. We know the user will have it when they restore.\n\t\t\tif (installed[i] === \"xcloud\") {\n\t\t\t\tm_data = this.utf8_to_b64(JSON.stringify({}));\n\t\t\t} else {\n\t\t\t\tm_data = this.utf8_to_b64(JSON.stringify(XKit.storage.get_all(installed[i])));\n\t\t\t}\n\n\t\t\tvar m_to_add = {};\n\t\t\tm_to_add.extension = installed[i];\n\t\t\tm_to_add.preferences = m_data;\n\t\t\tm_to_add.enabled = XKit.installed.enabled(installed[i]);\n\n\t\t\tif (limit_data && (m_data.length / 1024 / 1024) >= 1.5) {\n\t\t\t\tskipping.push(m_to_add.extension);\n\t\t\t\tskipping_size.push((m_data.length / 1024 / 1024));\n\t\t\t} else {\n\t\t\t\tto_send.settings.push(m_to_add);\n\t\t\t}\n\n\t\t}\n\n\n\t\tto_send.identifier = \"XCLOUD\";\n\n\t\t//Add this flag to the payload so we know we can unescape the payload.\n\t\tto_send.use_utf8 = true;\n\n\n\t\tto_send = JSON.stringify(to_send);\n\t\tconsole.log(\"Original size = \" + (to_send.length / 1024 / 1024) + \" megabytes\");\n\n\t\t//We need to base64 encode it without utf8 support so it's compatible with the old payload.\n\t\tto_send = \"XCS\" + XKit.extensions.xcloud.base64_encode(to_send) + \"XCE\";\n\n\t\treturn [to_send, skipping];\n\t},\n\n\tstart_upload: function() {\n\t\tXKit.extensions.xcloud.show_overlay();\n\t\tvar payload_pair = this.create_export_data(true);\n\t\tvar to_send = payload_pair[0];\n\t\tvar skipping = payload_pair[1];\n\n\t\tif ((to_send.length / 1024 / 1024) >= 5) {\n\n\t\t\tXKit.window.show(\n\t\t\t\t\"Unable to back up data.\",\n\n\t\t\t\t\"The backup data file is bigger than 5 megabytes, which is the maximum the XCloud servers can handle.
\" +\n\t\t\t\t\"Please use XCloud Local Backup instead.\",\n\n\t\t\t\t\"error\",\n\n\t\t\t\t'
\";\n\n\t\t\tXKit.window.show(\n\t\t\t\t\"Skipping some extensions\",\n\n\t\t\t\t\"The following extensions will not be backed up to XCloud because they are storing more than 1.5 megabytes of data, making the backup bigger than XCloud servers can handle.\" +\n\t\t\t\tm_html +\n\t\t\t\t\"To save your configuration without any filesize limits, please use XCloud Local Backup.\",\n\n\t\t\t\t\"warning\",\n\n\t\t\t\t'
\");\n\t\t\t$(\"#xkit_delete_selected\").html(button_default);\n\t\t\t$(\"#xkit_delete_selected\").addClass(\"disabled\");\n\t\t\tXKit.extensions.xinbox.mass_editor_working = false;\n\t\t\treturn;\n\t\t}\n\n\t\t$(\"#xkit_delete_selected\").html(button_working.replace(\"%m\", msg_count).replace(\"%s\", current_msg));\n\n\t\t$(\".xpost-selected:eq(0)\").addClass(\"xpost-working\");\n\n\t\tvar channel_id = $(\".xpost-selected:eq(0) .post_info_link\").text() || XKit.tools.get_blogs()[0];\n\t\tvar m_id = $(\".xpost-selected:eq(0)\").attr('id').replace(\"post_\", \"\");\n\n\t\tsetTimeout(function() {\n\n\t\t\tXKit.svc.post.delete({\n\t\t\t\tchannel_id: channel_id,\n\t\t\t\tpost_id: m_id\n\t\t\t})\n\t\t\t.then(() => {\n\t\t\t\tXKit.extensions.xinbox.delete_msg_index = current_msg;\n\t\t\t\tvar post_div = $(\".xpost-selected:eq(0)\");\n\t\t\t\t$(post_div).fadeOut('fast', function() { $(this).parent().remove(); });\n\t\t\t\tsetTimeout(function() { XKit.extensions.xinbox.mass_editor_delete(); }, 500);\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\tXKit.window.show(\"Couldn't fetch page.\",\n\t\t\t\t\t\"There might be a connection problem, or the extension might need updating.
\" +\n\t\t\t\t\t\"Please try again later, and if the problem continues, disable XInbox from \" +\n\t\t\t\t\t\"the XKit Control Panel to answer your asks while this problem is being fixed.\",\n\n\t\t\t\t\t\"error\",\n\n\t\t\t\t\t'
OK
'\n\t\t\t\t);\n\t\t\t});\n\n\t\t}, 700);\n\n\t},\n\n\tresize_text_area: function(post_id) {\n\n\t\tif ($(\"#ask_answer_field_\" + post_id + \"_tbl\").length > 0) {\n\n\t\t\t$(\"#ask_answer_field_\" + post_id + \"_tbl, #ask_answer_field_\" + post_id + \"_ifr\").css(\"height\", \"220px\");\n\n\t\t} else {\n\n\t\t\tsetTimeout(function() { XKit.extensions.xinbox.resize_text_area(post_id); }, 100);\n\n\t\t}\n\n\t},\n\n\tinit_tags: function() {\n\n\t\ttry {\n\n\t\t\t$(\"[id^='ask_answer_link_']\").unbind(\"click\");\n\n\t\t\t$(\"[id^='ask_answer_link_']\").bind(\"click\", function() {\n\n\t\t\t\tvar m_parent = $(this).parentsUntil(\".post\").parent();\n\t\t\t\tvar post_id = $(m_parent).attr('id').replace(\"post_\", \"\");\n\n\t\t\t\t// Make it longer?\n\t\t\t\tif (XKit.extensions.xinbox.preferences.bigger_answer_boxes.value === true) {\n\t\t\t\t\tXKit.extensions.xinbox.resize_text_area(post_id);\n\t\t\t\t}\n\n\t\t\t\tif ($(m_parent).find(\".xkit-xinbox-button-publish\").length > 0)\n\t\t\t\t\treturn;\n\n\t\t\t\t// Disable default buttons.\n\t\t\t\tvar submit_button = $(m_parent).find('[id^=\"ask_publish_button_\"]');\n\t\t\t\t$(submit_button).attr('onclick', 'return false;');\n\t\t\t\t$(submit_button).attr('data-state', '0');\n\n\t\t\t\tvar queue_button = $(m_parent).find('[id^=\"ask_queue_button_\"]');\n\t\t\t\t$(queue_button).attr('onclick', 'return false;');\n\t\t\t\t$(queue_button).attr('data-state', '2');\n\n\t\t\t\tvar draft_button = $(m_parent).find('[id^=\"ask_draft_button_\"]');\n\t\t\t\t$(draft_button).attr('onclick', 'return false;');\n\t\t\t\t$(draft_button).attr('data-state', '1');\n\n\t\t\t\tvar this_obj = m_parent;\n\t\t\t\tvar m_box_id = \"xinbox_tags_\" + post_id;\n\n\n\t\t\t\tvar asker = XKit.extensions.xinbox.preferences.anon_tag.value;\n\t\t\t\tvar respondant = $(m_parent).attr('data-tumblelog-name');\n\t\t\t\tif (m_parent.find(\".post_info\").find(\"a\").length > 0) {\n\t\t\t\t\tasker = m_parent.find(\".post_info\").find(\"a\").html();\n\n\t\t\t\t\t// If the ask is anonymous there is no link to their blog to parse.\n\t\t\t\t\t// If the blog is secondary there will be a link to respondant's own blog\n\t\t\t\t\t// and this will be found instead. Reset asker to anoymous if this is the case.\n\t\t\t\t\tif (asker === respondant) {\n\t\t\t\t\t\tasker = XKit.extensions.xinbox.preferences.anon_tag.value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar all_buttons = $(m_parent).find('[id^=\"ask_publish_button_\"], [id^=\"ask_draft_button_\"], [id^=\"ask_queue_button_\"]');\n\t\t\t\tvar private_button = $(m_parent).find('[id^=\"private_answer_button_\"]');\n\n\t\t\t\t$(all_buttons).remove();\n\n\t\t\t\tvar publish_button_div = \"\";\n\n\t\t\t\tif (private_button.length > 0) {\n\t\t\t\t\t$(private_button).css(\"margin-left\", \"2px\");\n\t\t\t\t\t$(private_button).before(publish_button_div);\n\t\t\t\t} else {\n\t\t\t\t\t$(m_parent).find(\".ask_cancel_button\").parent().append(publish_button_div);\n\t\t\t\t}\n\n\t\t\t\tvar other_buttons_div = \"