[
  {
    "path": "README.md",
    "content": "# tumblrVideoDown\ntumblr视频下载chrome扩展程序（兼容各大“国产”浏览器急速版）\n\n###chrome网上应用商店：\nhttps://chrome.google.com/webstore/detail/njnkdhldbefijmdmjongfghcelgajjli\n\n### Firefox附加组件商店：\nhttps://addons.mozilla.org/zh-CN/firefox/addon/tumblrvideodownloader/\n\n截图： <br />\n![github](https://raw.githubusercontent.com/unclehking/tumblrVideoDown/master/screenshot/1.webp \"github\")  \n![github](https://raw.githubusercontent.com/unclehking/tumblrVideoDown/master/screenshot/2.webp \"github\")  \n![github](https://raw.githubusercontent.com/unclehking/tumblrVideoDown/master/screenshot/3.webp \"github\")  \n<font color=red>\n### 离线chrome扩展程序（.crx文件）安装方式：\n <div>1、打开chrome扩展程序页面 chrome://extensions/ 或者 菜单 > 更多工具> 扩展程序；</div>\n <div>2、把.crx文件拖进该页面。</div>\n </font>\n\n### 2016-05-23\n<div>1、修复video控制条被隐藏的bug； </div>\n<div>2、新增“复制视频真实地址到剪贴板”。</div>\n"
  },
  {
    "path": "tumblrVideoDown/manifest.json",
    "content": "{\n\"update_url\": \"https://clients2.google.com/service/update2/crx\",\n\n\t\"name\": \"Tumblr Video Downloader\",\n\t\"short_name\": \"A Chrome Extension for download Tumblr video.\",\n\t\"version\": \"1.6\",\n\t\"author\": \"HKing\",\n\t\"description\":\"A Chrome Extension for easily download video from Tumblr website.\",\n\t\"background\": {\n\t\t\"scripts\": [\"res/js/background.js\"]\n\t},\n\t\"content_scripts\": [\n\t\t{\n\t\t\t\"matches\": [\"*://*.tumblr.com/*\"],\n\t\t\t\"css\":[\"res/css/style.css\"],\n\t\t\t\"js\": [\"res/js/jquery.min.js\",\"res/js/main.js\"],\n\t\t\t\"all_frames\": true,\n\t\t\t\"run_at\":\"document_end\"\n\t\t}\n\t],\n\t\"permissions\": [\n        \"contextMenus\",\"*://*.tumblr.com/*\",\"downloads\"\n\t],\n\t\"icons\": {\n\t\t\"16\": \"res/pic/icon_16.png\",\n\t\t\"48\": \"res/pic/icon_48.png\",\n\t\t\"128\": \"res/pic/icon_128.png\"\n\t},\n\t\"browser_action\": {\n\t\t\"name\": \"Tumblr Video Downloader\",\n\t\t\"default_icon\": \"res/pic/icon_128.png\"\n\t},\n\t\"manifest_version\": 2\n\n}\n"
  },
  {
    "path": "tumblrVideoDown/res/css/style.css",
    "content": "/*HKing 2016-04-29*/\nvideo.vjs-tech{\n\tposition: absolute !important;\n\ttop: 0px !important;\n\tleft: 0px !important;\n\tz-index: 998 !important;\n}\n.hkingWrap{\n\tposition: absolute;\n\tright: 4px;\n\ttop: 4px;\n\twidth: 60px;\n\theight: 60px;\n\tborder-radius: 100%;\n\tline-height: 28px;\n\tz-index: 999 !important;\n\tbackground-color: #ff0000;\n\tdisplay: none;\n\ttext-align: center;\n\tcursor: pointer;\n\toverflow: hidden;\n\tbox-shadow: 0 4px 6px rgba(0, 0, 0, 0.1),\n\t\t\t\t4px 0 6px rgba(0, 0, 0, 0.1),\n\t\t\t\t0 -4px 6px rgba(0, 0, 0, 0.1),\n\t\t\t\t-4px 0 6px rgba(0, 0, 0, 0.1);\n}\n.hkingWrap::before{\n\tdisplay: block;\n\tcontent: \" \";\n\twidth: 26px;\n\theight: 4px;\n\tbackground-color: #fff;\n\tborder-radius: 3px;\n\tposition: absolute;\n\tleft: 16px;\n\tbottom: 12px;\n}\n.hkingWrap::after{\n\tdisplay: block;\n\tcontent: \" \";\n\theight: 32px;\n\twidth: 4px;\n\tbackground-color: #fff;\n\tborder-radius: 3px;\n\tposition: absolute;\n\tleft: 27px;\n\tbottom: 20px;\n}\n.hkingWrap > div::before{\n\tdisplay: block;\n\tcontent: \" \";\n\theight: 22px;\n\twidth: 4px;\n\tbackground-color: #fff;\n\tborder-radius: 3px;\n\tposition: absolute;\n\tleft: 20px;\n\tbottom: 18px;\n\ttransform: rotate(-45deg);\n}\n.hkingWrap > div::after{\n\tdisplay: block;\n\tcontent: \" \";\n\theight: 22px;\n\twidth: 4px;\n\tbackground-color: #fff;\n\tborder-radius: 3px;\n\tposition: absolute;\n\tleft: 34px;\n\tbottom: 18px;\n\ttransform: rotate(45deg);\n}\n\n.hkingWrap > p{\n\tdisplay: none;\n\twidth: 100%;\n\theight: 100%;\n\tbackground-color: green;\n\tposition: relative;\n\tz-index: 998;\n}\n.hkingWrap > p:before{\n\tdisplay: block;\n\tcontent: \" \";\n\theight: 20px;\n\twidth: 4px;\n\tbackground-color: #fff;\n\tborder-radius: 3px;\n\tposition: absolute;\n\tleft: 19px;\n\tbottom: 13px;\n\ttransform: rotate(-45deg);\n}\n.hkingWrap > p:after{\n\tdisplay: block;\n\tcontent: \" \";\n\theight: 32px;\n\twidth: 4px;\n\tbackground-color: #fff;\n\tborder-radius: 3px;\n\tposition: absolute;\n\tleft: 34px;\n\tbottom: 12px;\n\ttransform: rotate(40deg);\n}\n\n.crt-video:hover .hkingWrap{\n\tdisplay: block;\n}\n\n.crt-skin-default.vjs-has-started .vjs-control-bar{\n\tz-index: 1000 !important;\n}\n"
  },
  {
    "path": "tumblrVideoDown/res/js/background.js",
    "content": "/*HKing 2016-06-25*/\nconst url = \"www.tumblr.com\";\nconst lang = navigator.language;\nchrome.runtime.onMessage.addListener(\n\tf_nancy = (request, sender, sendResponse) =>{\n\t\tchrome.downloads.download(\n\t\t\t{\n\t\t\t\turl: request.url\n\t\t\t},\n\t\t\tid=>{}\n\t\t);\n\t\tsendResponse({info:\"downloading\"});\n\t}\n);\nchrome.browserAction.onClicked.addListener( tab =>{\n\tchrome.tabs.getAllInWindow(null, f_nancy = tabs =>{\n\t\tfor(let t of tabs){\n\t\t\tif (t.url && t.url.match(url)) {\n\t\t\t\tf_nancy.tTab = true;\n\t\t\t\tchrome.tabs.update(t.id, {selected:true});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t!f_nancy.tTab && chrome.tabs.create({\"url\":`https://${url}`, \"selected\":true});\n\t});\n\n});\n\nlang === \"zh-CN\"\n&&\n(function(){\n\tchrome.contextMenus.create({\n\t\t\"title\": \"迅雷下载此视频\",\n\t\t\"contexts\":[\"video\"],\n\t\t\"id\":\"thunderDownload\",\n\t\t\"documentUrlPatterns\":[\"*://*.tumblr.com/*\"]\n\t});\n\tchrome.contextMenus.onClicked.addListener((info,tab)=>{\n\t\tlet rUrl = `https://vt.tumblr.com/${/tumblr_.*/.exec(info.srcUrl)[0].replace(/\\//g,\"_\")}.mp4`,\n\t\tthunderUrl = `thunder://${window.btoa(`AA${rUrl}ZZ`)}`;\n\t\tif(info.menuItemId === \"thunderDownload\"){\n\t\t\tchrome.tabs.sendMessage(\n\t\t\t\ttab.id,\n\t\t\t\t{\n\t\t\t\t\turl:thunderUrl,\n\t\t\t\t\toldUrl:info.srcUrl,\n\t\t\t\t\trUrl:rUrl\n\t\t\t\t},\n\t\t\t\tresponse=>{}\n\t\t\t);\n\t\t}\n\n\t});\n})();\n"
  },
  {
    "path": "tumblrVideoDown/res/js/main.js",
    "content": "/*HKing 2016-04-29*/\n\nvar ifr;\nchrome.runtime.onMessage.addListener(\n\tf_nancy = (request, sender, sendResponse) =>{\n\t\tvar v = document.querySelector(\"video\").querySelector(\"source\");\n\t\tif(v.src==request.oldUrl || self==top){\n\t\t\tifr = ifr || (f_nancy.isFirst=true,document.createElement('iframe'));\n\t\t\tifr.src = request.url;\n\t\t\tf_nancy.isFirst && document.body.appendChild(ifr);\n\t\t};\n\t    return false;\n\t}\n);\ndocument.addEventListener('mouseover', (e) =>{\n\tif(e.target.nodeName == \"VIDEO\"){\n\t\tlet $t = jQuery(e.target);\n\t\tif(!$t.next().hasClass('hkingWrap')){\n\t\t\tlet oUrl = e.target.querySelector(\"source\").src,\n\t\t\t    rUrl = `https://vt.tumblr.com/${/tumblr_.*/.exec(oUrl)[0].replace(/\\//g,\"_\")}.mp4`,\n\t\t\t    hkingWrap = `<div class=\"hkingWrap\" data-url=\"${rUrl}\" title=\"Download this video.\">\n\t\t\t\t\t\t\t\t<div></div>\n\t\t\t\t\t\t\t\t<p></p>\n\t\t\t\t\t\t\t</div>`;\n\t\t\tjQuery($t).after(hkingWrap);\n\t\t\t$t.next().click( (event) =>{\n\t\t\t\tvar target = event.target;\n\t\t\t\tchrome.runtime.sendMessage(\n\t\t\t\t\t{\n\t\t\t\t\t\turl:target.dataset.url\n\t\t\t\t\t},\n\t\t\t\t\tresponse=>{\n\t\t\t\t\t\t$(target).find(\"p\").show().delay(2000).fadeOut(1000);\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t\treturn false;\n\t\t\t});\n\t\t}\n\n\t};\n});\n"
  },
  {
    "path": "tumblrVideoDown.pem",
    "content": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCxPC3dwO/iAl3f\naTbQUkDIcTHSIkKllNvdVKuX02bdzBno+OF7wfuIdflH6Xegbxd5r61weS0qSfZY\nTridmt3Wv77sfvTxeyO0Q4v3tYhUa+Z2XGj4fmCGN10bPcKxheP2BgwGLt0dQ0IA\nl98Hdti7FAnTlG5ZSLZxCdXGBxqkY474hRkfpzbVmW9XRqfkFlAVq8OfNgWnJoU2\n7hgOqrElF6d8gCFi/ChFNaHaMwbv1w0J/9NLp8XdXYs0dzFn7B+WH9V0AZM9tglZ\nEwkyFjjo6PMvht26jtJqOUu1PrFQkFmx43Hl4Ls/qQk3roZAApXzeIVDj3tRIBoo\nWqKIyX5/AgMBAAECggEARJXGJgcwjSRfUUI07P63hRmQrwGFCvCE+Kx4TqOHLhN6\nf1Y4Y5zYiqEkmzh0i4gR7IwYMOsjmDbQ9rFX7d1tNVo0Nu6WORBu66Yr9uqv3AN5\nRppSIL8++RFZnV4UBoCKi70hUA84j8dkNjiPHSNXkWWau963qSNjPnEQ4bYEEFK1\nhBrzDRXwBmdQ5VlUGR6vh0oxi18BVdkkFkGJHxbi0ohNsRtMEARoKRr2WHHDtpjA\njCdopmuKCReVo6WFr8weZAiqmeyESMMd8t3MBqWWYeYIYdaqU/CQDCb5c+QQ1fAp\nq+WOg492MEwtdoB3iZ9XAFZWFq7rsK/8bMIlQWSMIQKBgQDf2WL3NhYqsoqxuCzy\nn2doiiee8fxSvskACYjf7yuECn+Zy5vj4P7NJ05X6mZ3GTv8Rzd+CfytVb0LX98h\nu7IvIx1NqvboQ+GsdAyEYaOXevvyftavwgIkWVbA1qkBz8sfz/QGD4fxfaVIU3bD\n1D9svA966qpyKwyHs1ay9xMc7wKBgQDKsNvyFeP4cIwwWyI2h9UQcnR6iutrxmng\nUG+xeDwzqTGqVEmBA86T0jIIOBfIVQVye/EOH8eyw23WzNHeGML04QvujH7HoXC5\nvdovnUiy5cpqwGy1P26wqb3k7n+C4u1DiDSK3aUse2Guy7WvSAespY4kfbp8GIXt\nuMCGvsPXcQKBgFVj78St9TbEdPPmdf73n9LZINQZK0/FR5ekC3qhGdB80MAyU31S\nTuCjpdcTq5KzJZbO8/Q4ixL0KfE02UFdAFPK6Vq/ZQClJGlMu5mkRWt7lrCigfL5\n5ydGjTlyqXXvdmTkRwoo0orkizBT5nI9fRRViPIyomJ62YTKfMA4UCoxAoGBAMCT\n1vWknMvAS0HqZJBA8EvHIyoG8XSduJyab/TDExfWaky19nxw3IYQEN9ERDxfo2RJ\npBdSVI9hJOwQAFovVpQJeie1LwOHPK4NVs8kdh0bPP2+Q8rVMNsC+1wWyenWp60h\nLSK/Qh8IPyAvhji6jCgZx/qdxl//gMgDYFDl0PbRAoGAEz7WE67daAAAPZDFAh5O\nw4JKyRQaOzFBbvKTf9eFQfkhGqRstHuDmKbMOH8W4pctApJyMo5xCtmcWyj4tTlN\n94hf7b7d6hQH2XXgPKrLd1IeEPucREj3N+a3XjaIBECaXRZ/ndbwWM5qQX3/sgxe\npGfBqYyvvp7gv9utifmU+E0=\n-----END PRIVATE KEY-----\n"
  }
]