Skip to content

Commit

Permalink
Add the "stories" support
Browse files Browse the repository at this point in the history
  • Loading branch information
mittya committed Nov 18, 2017
1 parent 6abcc05 commit 55d8b01
Show file tree
Hide file tree
Showing 11 changed files with 236 additions and 77 deletions.
6 changes: 3 additions & 3 deletions Makefile
@@ -1,7 +1,7 @@
.PHONY: firefox, chrome
.PHONY: ff, ch

firefox:
ff:
cd firefox && zip -r -X firefox.zip *

chrome:
ch:
cd chrome && zip -r -X chrome.zip *
2 changes: 1 addition & 1 deletion chrome/manifest.json
Expand Up @@ -4,7 +4,7 @@

"name": "__MSG_extName__",
"description": "__MSG_extDesc__",
"version": "1.7.6",
"version": "1.8.0",

"browser_action": {
"default_icon": {
Expand Down
89 changes: 65 additions & 24 deletions chrome/script.js
Expand Up @@ -25,56 +25,68 @@ Element.prototype.parents = function(selector) {
*/
if (window.location.pathname === '/') {
// Home page
var _box = document.querySelector('#react-root > section > main > section > div > div > div');
var _box_home = document.querySelector('#react-root > section > main > section > div > div > div');

// Logged in
if (_box) {
findMedia(_box);
if (_box_home) {
findMedia(_box_home);
}
} else if (window.location.pathname.match('/p/')) {
// Detail page

// TODO: 内页有时获取不到 djalog
setTimeout(function() {
var _box = '';
var _box_detail = '';

setTimeout(function() {
// first click is absolute,second is dialog
if (document.querySelector('div[role="dialog"]')) {
// djalog
_box = document.querySelector('div[role="dialog"]').querySelector('article');
_box_detail = document.querySelector('div[role="dialog"]').querySelector('article');
findMedia(_box_detail);
} else {
// absolute
_box = document.querySelector('#react-root > section > main article');
_box_detail = document.querySelector('#react-root > section > main article');
findMedia(_box_detail);
}
}, 1000); // TODO: 初次点击缩略图不能捕捉 dialog,这里临时用 setTimeout 修复

} else if (window.location.pathname.match('/stories/')) {
// Stories page

// TODO: remove setTimeout
setTimeout(function() {
var _box_story = document.querySelector('#react-root > section div._ni05h');

findMedia(_box);
}, 1000);
if (_box_story) {
findMedia(_box_story, 'stories');
}
}, 50);

}


function findMedia(box) {
var _box = box;
function findMedia(box, way) {
var _box = box, _way = way;
var _parent, _url, _username;

_box.addEventListener('mouseover', function(event) {

// img class: _2di5p
if (event.target.className === '_2di5p') {

if (event.target.width < 300) {
// thumb
return;
}
// disabled on the thumbnail page
if (event.target.width > 300) {
_parent = event.target.parentNode;
_url = event.target.src;
_url = _url.replace(/[a-zA-Z][0-9]+x[0-9]+\//, '');
_username = '';

_parent = event.target.parentNode;
_url = event.target.src;
_url = _url.replace(/[a-zA-Z][0-9]+x[0-9]+\//, '');
_username = '';
if (_parent.parents('article')[0].querySelector('._2g7d5')) {
_username = _parent.parents('article')[0].querySelector('._2g7d5').title;
if (_parent.parents('article')[0].querySelector('._2g7d5')) {
_username = _parent.parents('article')[0].querySelector('._2g7d5').title;
}

addBtn(_parent, _url, _username);
}

addBtn(_parent, _url, _username);
}

// video parents class: _7thjo
Expand All @@ -90,6 +102,30 @@ function findMedia(box) {

addBtn(_parent, _url, _username);
}

// Stories video
if (_way === 'stories' && event.target.tagName === 'VIDEO') {
_parent = event.target.parentNode;
_url = _parent.querySelector('video > source').src;
_url = _url.replace(/[a-zA-Z][0-9]+x[0-9]+\//, '');
_username = _parent.parents('section')[0].querySelector('._2g7d5').title;

addBtn(_parent, _url, _username);

return false;
}

// Stories Picture
if (_way === 'stories' && event.target.tagName === 'IMG') {
_parent = event.target.parentNode;
_url = _parent.querySelector('img').src;
_url = _url.replace(/[a-zA-Z][0-9]+x[0-9]+\//, '');
_username = _parent.parents('section')[0].querySelector('._2g7d5').title;

addBtn(_parent, _url, _username);

return false;
}
});
}

Expand All @@ -103,7 +139,12 @@ function addBtn(parent, url, username) {
}

var _btn = document.createElement('button');
_btn.className = 'downloadBtn';

if (window.location.pathname.match('/stories/')) {
_btn.className = 'downloadBtn inStories';
} else {
_btn.className = 'downloadBtn';
}

_btn.addEventListener('click', function(event) {
event.stopPropagation();
Expand Down
17 changes: 14 additions & 3 deletions chrome/style.css
Expand Up @@ -29,12 +29,23 @@
background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiB2aWV3Qm94PSIwIDAgMjU2IDI1NiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEuNDE0MjE7Ij48dXNlIGlkPSJpY29uIC8gZG93bmxvYWQiIHhsaW5rOmhyZWY9IiNfSW1hZ2UxIiB4PSIxNC4wMDkiIHk9IjMzIiB3aWR0aD0iMjI3LjQ5MXB4IiBoZWlnaHQ9IjE5MC40OTdweCIvPjxkZWZzPjxpbWFnZSBpZD0iX0ltYWdlMSIgd2lkdGg9IjIyOHB4IiBoZWlnaHQ9IjE5MXB4IiB4bGluazpocmVmPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQU9RQUFBQy9DQVlBQUFEdUhuQzVBQUFBQ1hCSVdYTUFBQTdFQUFBT3hBR1ZLdzRiQUFBSm8wbEVRVlI0bk8yZDJhN2pLaEFBbStqKy95LzdQaVRPT0Q3ZXNPa05xcVNSUnJPY3hOQkZOeGpqTWsyVFFEZzJPK1ZPWDVWU2R2K3Erb2VCT2dVaDNmbDJnRWRmTElSRjBBQWdwRDJ1QXA2eHlxaElhZ3hDMmpDSnhCVHdEREtvTFFpcFIxb0o5MEJPZlJDeVBWUHZiWXFZZWlCa0c3ckxobGRCenJZZzVETzZ6NFpYUWN3MklPUTloczJJWjN6RVJNcWJJR1E5Wk1VTElPWTlFUEk2aUhnRHhLd0RJYzlCeEljd3Y3d09RdTdEUExFeFpNdHpFSElic3FJaWlMblB5L3NMQkFRWmxmbTBMNDI4QVVMK1l4SmtOQU1wdDZGa2ZZT0lUckRnOHd0Q0ltTUltRmUrR2Ixa1JjWWdVTUsrR1ZsSVpBd0dVbzVic3FhUmNlTk1uSnF5THZUcEJIdU1YTDZPS0dSWUdZMk96MGdoNmFoU2ppWmtPQm1EckRLRzNKVTBvcFFqQ1JsR3hpQVM3aEZLenRHa0hFVklkeG1EUzdoRkdERkhrbklFSVYxbFRDamlGbEVHdE14dGVJbmVoWXdnWTA5QlJIc3EwN09RYnNFelFPRFF0a3IwS3FSTHdQUWVMQnZRem8zcGNhZU9lWkNVVXJvT2tnUEt3Y3Q4NEFZOUNtbktRc1JSSTdOOE1QdkFucmZZOVNha2FYWWNOQ3Z1Z1pRTjZHa09hU1lqSXA1aTJSZGQ5VU0zR1JJWlEySHBTVGNaUmFRZklVMDZCUm1yTUpHeXQ5SzFCeUZOeWlOa3ZBVlNWcEplU0dRTVQyL1RQRld5QzZsdUl6STJRVjNLWHJKa2FpRzFzeU15Tm9WTWVZSE1RcXJhaUl3cXFFclpRNWJNS3FUcVFnNHlxbUloWlZxeUNxa0dNcHFnWGI2bXRUS2prR3JaRVJuN0lIT1d6Q2lrSnNob0IxbHlnMnhDYW1kSHNFVk55cXhaTXBPUWxLcDlvdGJ1bjRDWmY2VWcrdE1lSmllZmNZUE1IY3Z0anlLQkI5OW9RcG9mUFVoMkRJUExTUS96YjAwLytJRC92TC9BQjg1bWdTTEdwZVVpNXFZb3NlQXRwUHQ1bnhDSFVvcmJZc3k4eThkYlRLK1MxVjFFNzRhSFhkeGpROFF2UHF3elpJakcvb0NNc0l0WHhyUVNNcEtJM0hPTWpmbGM4Z2hyTVMzdVE0YVNFZUlUY2NDMGVwSkVXOGh3TWpKM1RFSEkvckdRVXF0a0RTY2k1TUp6eGZVSTdSSldJME9HbFpIc21JclEvYVNWTFZzS09VbGdHU0VmRWVlU1N6U2tiQ1hrTkUxVHlCSmpSZXdlaG5TMGxyS0ZrQ215WXZUUkZqWkowV2t0cGN6MCtCVU1TSmFCdEpXVVQ0Vk1rUjAvNU9oWlNFc0xLWjhJbVViR0xLTXNiSktxODU1S2VWZklOREpDZnJJTnFFK2t2UE8wUjFnWkR6b3VWNC9DbXNPQUN4NlBWYkZYSzJRSUdWZmlJUnNzK2ZmVWNaeFl2UnlqTlVLNnloanh1QVZJZ2ZteE1HdHFwUFErTWVBVXRydkJROTRCOUk2akVCWGVFVmN6cE5jQlJJZ0lHb1NONXl0Q21uNTVTbE13SXVRSmg2ZENXdHBJVnF6aVQwQ3gySFVMNjRUelNFakxBMndKb0d0YzdoUGF0WW9Rc1g2ME1TREVGNFFmcXZxa2h4ZVlHbUp5Z1AxWm43aHVMa2ZHS200TmtFaFpoZnRiSlhhRk5IaWZoZ2d5WHVWUnRZS1VWYWhMZWRTWGUwS3FkaDR5MXRGaWNJeCsveTBZRnBseXMwTTJoZFRzUEdTc3BtVm5ZT1YxVktYY2MyeExTTFZPUTBaSWh2bGJudjhJeVV0UlkwR3A2WTdwVzU3WFF0TDdIWVBjSWZucGxCOGh5WTVEZ0pYMW1HVkpxL3VReUFqWk1ZbmhwWkFxSTZmM2pWYUFWaWpHOHRjOTFReEpxUXFkb1g1Lzhpc2tFMzRBSDVidXpVSTJ0NUhzQ0oyaWxTVW5FVTR1QndpRnBwQmtSK2dWdGRoK2liU2ZQN0t5Q3IzVE9zWm5CMS9DaldLQUtFeGFKU3NwRW5wSEpjWloxQUVJUkhNaG1UL0NLR2pFT2hrU0lCQXZkdWdBeEdDYUpqSWtRQ1EwaEdRU0NhUFFQTmJKa0FDQlFFaUFRQ0FrUUNBUUVpQVFDQWtRQ0lRRUNJU0drT3cwZ0ZGb0h1dGtTSUJBSUNSQUlCQVNJQkF2cmFNSUFIcEg0K2diclF5SmxkQTdLakZPeVFvUUNCVWhLVnVoZDdSaS9DVjZqMHRoSmZTS1ZteVhsd2puNEFCNE16dW9Ob2VrYklWZTBZeHQ3VVVkcklUZVVJM3BXVWlkMS9tOFJ4S2toRjZZRkxOakVWbGtTT2FSQUQ0czNWTy9EMG1XaEU3UXpJNWZsa0tTSWdGOCtMcjNreUcxeWxheUpDUkhMVHV1blRQYk9vZVVrQlNUVW5WbUxhUnEyWXFVa0F3TEdYK2MrNU1odFZkYjJUQUFXZENPMVMzWHRrcFdpOFVkcklUb1dNVG9IOWYrMi94WHBhaU9EblBwK2hraFdOMkZTSmpNR2ZjcTBiMUZuV0t4VVlBNUpRVERVc1pOd2R3ZlVFWktDSUxwYXVvZVIwS2FaRWtScEFSM3pHUThtNlp0emlFOVlGNEpEb1RJaWt2T1NsYXpMRG16eUpheFdncDZZaElIR2E4a216QVpjc25jVUtXVVNjaVcwSlp3V1hISkZTRkxLY1hsSWxabHJBaHl3ajNlZ2VRbzR0V3AyTlVNNlNhbHlFOURJaWRjeFYzQ21acDFrWnFTMVZYS21hV2NJcHMzV0JGMUxINEMwanMrMTlRdVV0Yk9JWXNFVzJ6WjZJRHZINnhrUmRUYy9CdUpnMGwzUWxYY1ZTL3FhRytyYThucWUzSkxKU2Z1VmRsZDd0eWh1TE5UeC94V1NDdW1hWnA3TjJjUGo4WDB3ZnQ3M09MdTRIOTM2MXhhS1VYWUdaU0F0Q0tLM0pkUjVObGUxaDZraEhnTUs2UEk4ODNscWFVVXNpUTBwTVVhUll1ZE9pRnVoOXhobXFZV3U0R09ManoxYUhXQTFqV25qQ09STmpLS3ROczZsMWJLQjF5NTN0NVdkcS9jYk8vdG1rOXBlYjB0bjRkTVdiN2VHRVNxTmlaM3RJQTBmVmFwci94RGtSc1BDR1FjMEZzUFBxMGZVRTRwWlFXWGczTDFuMFJ5UzFsZC9TemFLZk4xSDZKUkNXaWNHRkErS1B6b3ZDUU96dEdtSXFlVVV1Yk0wenpJTlkvdzZFM0t4NEdaVU1vUnIva1E3Zm14OXBrNjVUT2FLSCtNUHEyeVJHOEJlb1VlTXV3aWpsV0QyZUtRcXlLQnhmVDRUa21rOUhxaVBoUXJFZFcvb09XcGMxOHhFOUk4TW9OTHFTRmoxR3ZkeFZMRUdZOWpJRm4wK1JCVXl1RVhjVFFYYmM3d1BKZlZ2WXlOY0FNN21KVGVNcm9PMUZienhDTzhEMHFleTFqemp2QnUrQ1ZCcFBTV2NjWWxGaFlaMFRVbUlwMDZOM2VFK2xrb0VjdmxSdnRxSDN4OENCbS9hRDhJSC9Wc3BraEN6cnhUMTBKT2tYYUNSc3FNYTV5a3RKS3g1cHJtR0dqMjNiSWM1MUtpall3bjNEN1FxTUdJNkhMY2ZPc1BYUTFJN2krWHVVQjF4WlQ1NExPSUdmS0kzMkh1YjhOdjlWcWF6cGd4eXBUaHl0UWRsaFdUU0NkOXZFZTJET21OYVJCcnpLUG13STd5Y2huNHhYdVZOUnVtSzRCYTBqQUl4NFVNZVk4czVaNHJaTWQ2eUpEM1lLZlJDY2g0RDRTOEQxTHVnSXozUWNobklPVUtaSHdHUWo0SEtUOGc0M01Rc2czRFM0bU1iVURJZGd3ckpUSzJBeUhiTXB5VXlOZ1doR3pQTUZJaVkzc1FVb2Z1cFVSR0hSQlNqMjZsUkVZOUVGS1g3cVJFUmwwUVVwOXVwRVJHZlJEU2h2UlNJcU1OQ0dsSFdpbVIwUTZFdENXZGxNaG9DMExhazBaS1pMUUhJWDBJTHlVeStvQ1Fmb1NWRWhuOVFFaGZ3a21Kakw0Z3BEOWhwRVJHZnhBeUJ1NVNJbU1NRURJT2JsSWlZeHdRTWhaRHZ3VU1FRElpWmxJaVl6d1FNaWJxVWlKalRCQXlMbXBTSW1OY0VESTJ6YVZFeHRnZ1pIeWFTWW1NOFVISUhEeVdFaGx6Z0pCNXVDMGxNdVlCSVhOUkxTVXk1b0wzUStaa0V0bC84ZXBDV2tSTXh2OEJ3WXI4Qm1Mcm9RQUFBQUJKUlU1RXJrSmdnZz09Ii8+PC9kZWZzPjwvc3ZnPg==");
}

.downloadBtn.inStories {
width: 28px;
top: 10px;
right: 10px;
border-radius: 50%;
font-size: 12px;
background-size: 18px;
}

/*
._4rbun: IMG parent
._6jl3c: VIDEO parent
._2us5i Stories parent
*/
._4rbun:hover .downloadBtn,
._6jl3c:hover .downloadBtn {
._6jl3c:hover .downloadBtn,
._2us5i:hover .downloadBtn {
opacity: 1;
}

Expand All @@ -44,7 +55,7 @@
}


/* pic cover */
._si7dy {
._si7dy /* pic cover */,
._o95x1 /* stories cover */ {
display: none !important;
}
Binary file added firefox/icons/icon_128.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added firefox/icons/icon_16.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added firefox/icons/icon_48.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 4 additions & 4 deletions firefox/manifest.json
Expand Up @@ -3,7 +3,7 @@

"name": "IGHelper",
"description": "Easily download Instagram pictures and videos.",
"version": "1.7.6",
"version": "1.8.0",

"browser_action": {
"default_icon": {
Expand All @@ -13,9 +13,9 @@
},

"icons": {
"16": "icons/icon_512.png",
"48": "icons/icon_512.png",
"128": "icons/icon_512.png"
"16": "icons/icon_16.png",
"48": "icons/icon_48.png",
"128": "icons/icon_128.png"
},

"background": {
Expand Down
89 changes: 65 additions & 24 deletions firefox/script.js
Expand Up @@ -25,56 +25,68 @@ Element.prototype.parents = function(selector) {
*/
if (window.location.pathname === '/') {
// Home page
var _box = document.querySelector('#react-root > section > main > section > div > div > div');
var _box_home = document.querySelector('#react-root > section > main > section > div > div > div');

// Logged in
if (_box) {
findMedia(_box);
if (_box_home) {
findMedia(_box_home);
}
} else if (window.location.pathname.match('/p/')) {
// Detail page

// TODO: 内页有时获取不到 djalog
setTimeout(function() {
var _box = '';
var _box_detail = '';

setTimeout(function() {
// first click is absolute,second is dialog
if (document.querySelector('div[role="dialog"]')) {
// djalog
_box = document.querySelector('div[role="dialog"]').querySelector('article');
_box_detail = document.querySelector('div[role="dialog"]').querySelector('article');
findMedia(_box_detail);
} else {
// absolute
_box = document.querySelector('#react-root > section > main article');
_box_detail = document.querySelector('#react-root > section > main article');
findMedia(_box_detail);
}
}, 1000); // TODO: 初次点击缩略图不能捕捉 dialog,这里临时用 setTimeout 修复

} else if (window.location.pathname.match('/stories/')) {
// Stories page

// TODO: remove setTimeout
setTimeout(function() {
var _box_story = document.querySelector('#react-root > section div._ni05h');

findMedia(_box);
}, 1000);
if (_box_story) {
findMedia(_box_story, 'stories');
}
}, 50);

}


function findMedia(box) {
var _box = box;
function findMedia(box, way) {
var _box = box, _way = way;
var _parent, _url, _username;

_box.addEventListener('mouseover', function(event) {

// img class: _2di5p
if (event.target.className === '_2di5p') {

if (event.target.width < 300) {
// thumb
return;
}
// disabled on the thumbnail page
if (event.target.width > 300) {
_parent = event.target.parentNode;
_url = event.target.src;
_url = _url.replace(/[a-zA-Z][0-9]+x[0-9]+\//, '');
_username = '';

_parent = event.target.parentNode;
_url = event.target.src;
_url = _url.replace(/[a-zA-Z][0-9]+x[0-9]+\//, '');
_username = '';
if (_parent.parents('article')[0].querySelector('._2g7d5')) {
_username = _parent.parents('article')[0].querySelector('._2g7d5').title;
if (_parent.parents('article')[0].querySelector('._2g7d5')) {
_username = _parent.parents('article')[0].querySelector('._2g7d5').title;
}

addBtn(_parent, _url, _username);
}

addBtn(_parent, _url, _username);
}

// video parents class: _7thjo
Expand All @@ -90,6 +102,30 @@ function findMedia(box) {

addBtn(_parent, _url, _username);
}

// Stories video
if (_way === 'stories' && event.target.tagName === 'VIDEO') {
_parent = event.target.parentNode;
_url = _parent.querySelector('video > source').src;
_url = _url.replace(/[a-zA-Z][0-9]+x[0-9]+\//, '');
_username = _parent.parents('section')[0].querySelector('._2g7d5').title;

addBtn(_parent, _url, _username);

return false;
}

// Stories Picture
if (_way === 'stories' && event.target.tagName === 'IMG') {
_parent = event.target.parentNode;
_url = _parent.querySelector('img').src;
_url = _url.replace(/[a-zA-Z][0-9]+x[0-9]+\//, '');
_username = _parent.parents('section')[0].querySelector('._2g7d5').title;

addBtn(_parent, _url, _username);

return false;
}
});
}

Expand All @@ -103,7 +139,12 @@ function addBtn(parent, url, username) {
}

var _btn = document.createElement('button');
_btn.className = 'downloadBtn';

if (window.location.pathname.match('/stories/')) {
_btn.className = 'downloadBtn inStories';
} else {
_btn.className = 'downloadBtn';
}

_btn.addEventListener('click', function(event) {
event.stopPropagation();
Expand Down

0 comments on commit 55d8b01

Please sign in to comment.