From 8084a57480c5bb35021f2bb5cbc82ee6a0b46195 Mon Sep 17 00:00:00 2001 From: lartsch Date: Sun, 4 Dec 2022 11:56:42 -0500 Subject: [PATCH] add support for replying --- firefox/manifest.json | 2 +- manifest.json | 2 +- src/inject.js | 45 ++++++++++++++++++++++++++++++++++------ src/inject.min.js | 2 +- src/nodeinserted.css | 1 + src/nodeinserted.min.css | 2 +- 6 files changed, 44 insertions(+), 10 deletions(-) diff --git a/firefox/manifest.json b/firefox/manifest.json index f1206ff..abc7120 100644 --- a/firefox/manifest.json +++ b/firefox/manifest.json @@ -1,6 +1,6 @@ { "name": "FediFollow", - "version": "0.8.2", + "version": "0.8.3", "description": "Simplifies interactions on other Mastodon instances than your own. Visit https://github.com/lartsch/FediFollow-Chrome for more.", "manifest_version": 2, "content_scripts": [ diff --git a/manifest.json b/manifest.json index c6bdc22..a4ddf01 100644 --- a/manifest.json +++ b/manifest.json @@ -1,6 +1,6 @@ { "name": "FediFollow", - "version": "0.8.2", + "version": "0.8.3", "description": "Simplifies interactions on other Mastodon instances than your own. Visit https://github.com/lartsch/FediFollow-Chrome for more.", "manifest_version": 3, "content_scripts": [ diff --git a/src/inject.js b/src/inject.js index efbc60f..ca820d9 100644 --- a/src/inject.js +++ b/src/inject.js @@ -35,7 +35,7 @@ const settingsDefaults = { } // fix for cross-browser storage api compatibility and other global vars -var browser, chrome, lasthomerequest; +var browser, chrome, lasthomerequest, fedireply; var lastUrl = window.location.href; @@ -71,6 +71,19 @@ function log(text) { jQuery.fn.onAppear = jQuery.fn.DOMNodeAppear; })(jQuery); +// extract given url parameter value +var getUrlParameter = function getUrlParameter(sParam) { + var sPageURL = window.location.search.substring(1), + sURLVariables = sPageURL.split('&'), sParameterName, i; + for (i = 0; i < sURLVariables.length; i++) { + sParameterName = sURLVariables[i].split('='); + if (sParameterName[0] === sParam) { + return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]); + } + } + return false; +}; + // promisified xhr for api calls async function makeRequest(method, url, extraheaders) { // try to prevent error 429 too many request by delaying home instance requests @@ -503,6 +516,13 @@ function extractHandle(selectors) { return false; } +// process any toots found on supported sites +async function processReply() { + $(document).DOMNodeAppear(function(e) { + $(e.target).find("button:has(i.fa-reply").click() + }, "div.detailed-status__action-bar") +} + // process any toots found on supported sites async function processToots() { async function clickAction(searchstring, e) { @@ -635,6 +655,7 @@ async function processToots() { var favButton = $(el).find("button:has(i.fa-star), a.icon-button:has(i.fa-star)") var boostButton = $(el).find("button:has(i.fa-retweet), a.icon-button:has(i.fa-retweet)") var bookmarkButton = $(el).find("button:has(i.fa-bookmark)") + var replyButton = $(el).find("button:has(i.fa-reply)") $(bookmarkButton).removeClass("disabled").removeAttr("disabled") if (resolveAndAction[2]) { if (!$(favButton).hasClass("fediactive")) { @@ -652,6 +673,11 @@ async function processToots() { } } // continue with click handling... + $(replyButton).on("click", function(e){ + e.preventDefault(); + e.stopImmediatePropagation(); + redirectTo(resolveAndAction[0]+"?fedireply") + }) var clicks = 0; var timer; $([favButton, boostButton, bookmarkButton]).each(function() { @@ -974,8 +1000,11 @@ function checkSettings() { async function checkSite() { // is this site on our home instance? if (location.hostname == settings.fedifollow_homeinstance) { - log("Current site is your home instance."); - return false; + fedireply = getUrlParameter("fedireply") + if (!fedireply) { + log("Current site is your home instance."); + return false; + } } // are we in whitelist mode? if (settings.fedifollow_mode == "whitelist") { @@ -1015,9 +1044,13 @@ async function run() { if (checkSettings()) { // check site (if and which scripts should run) if (await checkSite()) { - processFollow(); - processToots(); - urlChangeLoop(); + if (fedireply) { + processReply() + } else { + processFollow(); + processToots(); + urlChangeLoop(); + } } else { log("Will not process this site.") } diff --git a/src/inject.min.js b/src/inject.min.js index daf49d7..67c374b 100644 --- a/src/inject.min.js +++ b/src/inject.min.js @@ -1 +1 @@ -const e=["div.account__header button.logo-button","div.public-account-header a.logo-button","div.account-card a.logo-button","div.directory-card a.icon-button","div.detailed-status a.logo-button"],o=["div.account__header__tabs__name small","div.public-account-header__tabs__name small","div.detailed-status span.display-name__account","div.display-name > span"],a=/^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$/,i=/^(https?:\/\/(www\.)?.*\..*?\/)((@\w+(@([\w-]+\.)+?\w+)?)|explore|following|followers)\/?(\d+)?\/?$/,t=/^(https?:\/\/(www\.)?.*\..*?\/)((@\w+(@([\w-]+\.)+?\w+)?)|explore|public|public\/local)\/?(\d+)?\/?$/,n=/^(?:https?:\/\/(www\.)?.*\..*?\/)(@\w+(?:@([\w-]+\.)+?\w+)?)\/\d+\/?$/,s=/^[^@]*@(?\w+)(@(?([\w-]+\.)+?\w+))?\/?$/,l=!0,r="[FediFollow]",M=200,f="/api/v1/instance",d="/api/v1/statuses",c="/api/v2/search",u="/api/v1/accounts",w=500;var browser,chrome,h,m={};const p={fedifollow_homeinstance:null,fedifollow_alert:!1,fedifollow_mode:"blacklist",fedifollow_whitelist:null,fedifollow_blacklist:null,fedifollow_target:"_self",fedifollow_autoaction:!0,fedifollow_token:null,fedifollow_showfollows:!0,fedifollow_redirects:!0,fedifollow_enabledelay:!0};var v=window.location.href;function g(t){l&&console.log(r+" "+t)}async function b(i,n,l){var t,e;return~n.indexOf(m.fedifollow_homeinstance)&&m.fedifollow_enabledelay&&(t=Date.now(),(e=t-h)<300&&await new Promise(t=>{setTimeout(function(){t()},w-e)}),h=t),new Promise(function(t,e){let o=new XMLHttpRequest;if(o.open(i,n),o.timeout=3e3,l)for(var a in l)o.setRequestHeader(a,l[a]);o.onload=function(){200<=this.status&&this.status<300?t(o.responseText):t(!1)},o.onerror=function(){e({status:this.status,statusText:o.statusText})},o.send()})}function _(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function k(t,e,o){return t.replace(new RegExp(_(e),"g"),o)}function y(t){var e;m.fedifollow_redirects?(m.fedifollow_alert&&alert("Redirecting..."),e=window.open(t,m.fedifollow_target),g("Redirected to "+t),e?e.focus():g("Could not open new window. Please allow popups for this website.")):g("Redirects disabled.")}async function T(t){if(m.fedifollow_autoaction){t=await b("POST","https://"+m.fedifollow_homeinstance+u+"/"+t+"/follow",m.tokenheader);if(t)return!(!(t=JSON.parse(t)).following&&!t.requested&&(g("Follow failed."),1))}else g("Auto-action disabled.")}async function A(t){if(m.fedifollow_autoaction){t=await b("POST","https://"+m.fedifollow_homeinstance+u+"/"+t+"/unfollow",m.tokenheader);if(t)return!(t=JSON.parse(t)).following&&!t.requested||(g("Unfollow failed."),!1)}else g("Auto-action disabled.")}async function O(t){if(m.fedifollow_autoaction){t=await b("POST","https://"+m.fedifollow_homeinstance+d+"/"+t+"/reblog",m.tokenheader);if(t)return!!JSON.parse(t).reblogged||(g("Boost failed."),!1)}else g("Auto-action disabled.")}async function S(t){if(m.fedifollow_autoaction){t=await b("POST","https://"+m.fedifollow_homeinstance+d+"/"+t+"/unreblog",m.tokenheader);if(t)return!JSON.parse(t).reblogged||(g("Unboost failed."),!1)}else g("Auto-action disabled.")}async function x(t){if(m.fedifollow_autoaction){t=await b("POST","https://"+m.fedifollow_homeinstance+d+"/"+t+"/favourite",m.tokenheader);if(t)return!!JSON.parse(t).favourited||(g("Favourite failed."),!1)}else g("Auto-action disabled.")}async function R(t){if(m.fedifollow_autoaction){t=await b("POST","https://"+m.fedifollow_homeinstance+d+"/"+t+"/unfavourite",m.tokenheader);if(t)return!JSON.parse(t).favourited||(g("Unfavourite failed."),!1)}else g("Auto-action disabled.")}async function U(t){if(m.fedifollow_autoaction){t=await b("POST","https://"+m.fedifollow_homeinstance+d+"/"+t+"/bookmark",m.tokenheader);if(t)return!!JSON.parse(t).bookmarked||(g("Bookmark failed."),!1)}else g("Auto-action disabled.")}async function E(t){if(m.fedifollow_autoaction){t=await b("POST","https://"+m.fedifollow_homeinstance+d+"/"+t+"/unbookmark",m.tokenheader);if(t)return!JSON.parse(t).bookmarked||(g("Unbookmark failed."),!1)}else g("Auto-action disabled.")}async function q(t){var e="https://"+m.fedifollow_homeinstance+u+"/relationships?";for(const n of t)e+="id[]="+n.toString()+"&";var o=await b("GET",e,m.tokenheader),a=Array(t.length).fill(!1);if(o)for(var o=JSON.parse(o),i=0;i{var o=setInterval(function(){var t=$("body").html();t==a?(changing=!1,e(!0),clearInterval(o)):a=t},100)}),$(document).find("div.entry > div.status").each(function(){o($(this))})}),$(document).DOMNodeAppear(async function(t){var t=$(t.target),a=$("body").html();await new Promise(e=>{var o=setInterval(function(){var t=$("body").html();t==a?(changing=!1,e(!0),clearInterval(o)):a=t},100)}),t.find("div.status").each(async function(){document.body.contains($(this)[0])&&o($(this))}),G(t,{subtree:!0,childList:!0},["div.status"],function(t,e){o($(t))})},"article, div.entry > div.status")):g("There are no toots on this site")}async function I(){var t;i.test(v.split("?")[0])?(t=e.join(","),$(document).DOMNodeAppear(async function(t){!async function(i){var t,n,l,r,s="follow";if($(i).closest("div.account-card").length)t=$(i).closest("div.account-card").find("div.display-name > span").text().trim();else for(const e of o)if($(e).length){t=$(e).text().trim();break}t&&((n=await F(t))?(m.fedifollow_showfollows&&(await q([n[0]]))[0]&&($(i).text("Unfollow"),s="unfollow"),l=0,$(i).off(),$(i).unbind(),$(i).on("click",async function(t){var e,o,a;t.preventDefault(),t.stopImmediatePropagation(),1==++l?r=setTimeout(async function(){"follow"==s?await T(n[0])&&($(i).text("Unfollow"),s="unfollow"):await A(n[0])&&($(i).text("Follow"),s="follow"),l=0},350):(clearTimeout(r),"follow"==s?await T(n[0])&&($(i).text("Unfollow"),s="unfollow",e=!0):await A(n[0])&&($(i).text("Follow"),s="follow",e=!0),e?(o=$(i).text(),a="https://"+m.fedifollow_homeinstance+"/@"+n[1],$(i).text("Redirecting..."),setTimeout(function(){y(a),$(i).text(o)},1e3)):g("Action failed."),l=0)}).on("dblclick",function(t){t.preventDefault(),t.stopImmediatePropagation()})):g("Could not resolve user home ID."))}($(t.target))},t)):g("Not a profile URL.")}async function J(){setTimeout(function(){v!=window.location.href&&(v=window.location.href,I(),P()),J()},300)}function D(t){var e,o=[];for(e of t.split(/\r?\n/))e=e.trim(),a.test(e)?o.push(e):g("Removed invalid domain "+e+" from blacklist/whitelist.");return[...new Set(o)]}function z(){if(null==m.fedifollow_homeinstance||!m.fedifollow_homeinstance)return g("Mastodon home instance is not set."),!1;if(!m.fedifollow_token)return g("No API token available. Are you logged in to your home instance? If yes, wait for 1-2 minutes and reload page."),!1;if(m.tokenheader={Authorization:"Bearer "+m.fedifollow_token},!a.test(m.fedifollow_homeinstance))return g("Instance setting is not a valid domain name."),!1;if($.inArray(m.fedifollow_mode,["blacklist","whitelist"])<0&&(m.fedifollow_mode="blacklist"),$.inArray(m.fedifollow_target,["_blank","_self"])<0&&(m.fedifollow_target="_blank"),"whitelist"==m.fedifollow_mode){if(m.fedifollow_whitelist=D(m.fedifollow_whitelist),m.fedifollow_whitelist.length<1)return g("Whitelist is empty or invalid."),!1}else m.fedifollow_blacklist=D(m.fedifollow_blacklist);return!0}async function H(){if(location.hostname==m.fedifollow_homeinstance)g("Current site is your home instance.");else{if("whitelist"==m.fedifollow_mode){if($.inArray(location.hostname,m.fedifollow_whitelist)<0)return g("Current site is not in whitelist."),!1}else if(-1<$.inArray(location.hostname,m.fedifollow_blacklist))return g("Current site is in blacklist."),!1;var t=await b("GET",location.protocol+"//"+location.hostname+f,null);if(t)if(JSON.parse(t).uri)return!0;g("Does not look like a Mastodon instance.")}return!1}async function B(){(m=await(browser||chrome).storage.local.get(p))?z()&&(await H()?(I(),P(),J()):g("Will not process this site.")):g("Could not load settings.")}!function(a){a.fn.DOMNodeAppear=function(e,o){var t=a(this);if(!(o=o||"function"==typeof t.selector&&t.selector))return!1;a(document).on("animationstart webkitAnimationStart oanimationstart MSAnimationStart",function(t){"nodeInserted"==t.originalEvent.animationName&&a(t.target).is(o)&&"function"==typeof e&&e(t)})},jQuery.fn.onAppear=jQuery.fn.DOMNodeAppear}(jQuery),B(); \ No newline at end of file +const e=["div.account__header button.logo-button","div.public-account-header a.logo-button","div.account-card a.logo-button","div.directory-card a.icon-button","div.detailed-status a.logo-button"],o=["div.account__header__tabs__name small","div.public-account-header__tabs__name small","div.detailed-status span.display-name__account","div.display-name > span"],i=/^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$/,a=/^(https?:\/\/(www\.)?.*\..*?\/)((@\w+(@([\w-]+\.)+?\w+)?)|explore|following|followers)\/?(\d+)?\/?$/,t=/^(https?:\/\/(www\.)?.*\..*?\/)((@\w+(@([\w-]+\.)+?\w+)?)|explore|public|public\/local)\/?(\d+)?\/?$/,n=/^(?:https?:\/\/(www\.)?.*\..*?\/)(@\w+(?:@([\w-]+\.)+?\w+)?)\/\d+\/?$/,s=/^[^@]*@(?\w+)(@(?([\w-]+\.)+?\w+))?\/?$/,l=!0,r="[FediFollow]",M=200,f="/api/v1/instance",d="/api/v1/statuses",c="/api/v2/search",u="/api/v1/accounts",w=500;var browser,chrome,h,p,m={};const v={fedifollow_homeinstance:null,fedifollow_alert:!1,fedifollow_mode:"blacklist",fedifollow_whitelist:null,fedifollow_blacklist:null,fedifollow_target:"_self",fedifollow_autoaction:!0,fedifollow_token:null,fedifollow_showfollows:!0,fedifollow_redirects:!0,fedifollow_enabledelay:!0};var g=window.location.href;function b(t){l&&console.log(r+" "+t)}!function(i){i.fn.DOMNodeAppear=function(e,o){var t=i(this);if(!(o=o||"function"==typeof t.selector&&t.selector))return!1;i(document).on("animationstart webkitAnimationStart oanimationstart MSAnimationStart",function(t){"nodeInserted"==t.originalEvent.animationName&&i(t.target).is(o)&&"function"==typeof e&&e(t)})},jQuery.fn.onAppear=jQuery.fn.DOMNodeAppear}(jQuery);var _=function(t){for(var e,o=window.location.search.substring(1).split("&"),i=0;i{setTimeout(function(){t()},w-e)}),h=t),new Promise(function(t,e){let o=new XMLHttpRequest;if(o.open(a,n),o.timeout=3e3,l)for(var i in l)o.setRequestHeader(i,l[i]);o.onload=function(){200<=this.status&&this.status<300?t(o.responseText):t(!1)},o.onerror=function(){e({status:this.status,statusText:o.statusText})},o.send()})}function y(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function A(t,e,o){return t.replace(new RegExp(y(e),"g"),o)}function T(t){var e;m.fedifollow_redirects?(m.fedifollow_alert&&alert("Redirecting..."),e=window.open(t,m.fedifollow_target),b("Redirected to "+t),e?e.focus():b("Could not open new window. Please allow popups for this website.")):b("Redirects disabled.")}async function O(t){if(m.fedifollow_autoaction){t=await k("POST","https://"+m.fedifollow_homeinstance+u+"/"+t+"/follow",m.tokenheader);if(t)return!(!(t=JSON.parse(t)).following&&!t.requested&&(b("Follow failed."),1))}else b("Auto-action disabled.")}async function S(t){if(m.fedifollow_autoaction){t=await k("POST","https://"+m.fedifollow_homeinstance+u+"/"+t+"/unfollow",m.tokenheader);if(t)return!(t=JSON.parse(t)).following&&!t.requested||(b("Unfollow failed."),!1)}else b("Auto-action disabled.")}async function x(t){if(m.fedifollow_autoaction){t=await k("POST","https://"+m.fedifollow_homeinstance+d+"/"+t+"/reblog",m.tokenheader);if(t)return!!JSON.parse(t).reblogged||(b("Boost failed."),!1)}else b("Auto-action disabled.")}async function R(t){if(m.fedifollow_autoaction){t=await k("POST","https://"+m.fedifollow_homeinstance+d+"/"+t+"/unreblog",m.tokenheader);if(t)return!JSON.parse(t).reblogged||(b("Unboost failed."),!1)}else b("Auto-action disabled.")}async function U(t){if(m.fedifollow_autoaction){t=await k("POST","https://"+m.fedifollow_homeinstance+d+"/"+t+"/favourite",m.tokenheader);if(t)return!!JSON.parse(t).favourited||(b("Favourite failed."),!1)}else b("Auto-action disabled.")}async function E(t){if(m.fedifollow_autoaction){t=await k("POST","https://"+m.fedifollow_homeinstance+d+"/"+t+"/unfavourite",m.tokenheader);if(t)return!JSON.parse(t).favourited||(b("Unfavourite failed."),!1)}else b("Auto-action disabled.")}async function q(t){if(m.fedifollow_autoaction){t=await k("POST","https://"+m.fedifollow_homeinstance+d+"/"+t+"/bookmark",m.tokenheader);if(t)return!!JSON.parse(t).bookmarked||(b("Bookmark failed."),!1)}else b("Auto-action disabled.")}async function F(t){if(m.fedifollow_autoaction){t=await k("POST","https://"+m.fedifollow_homeinstance+d+"/"+t+"/unbookmark",m.tokenheader);if(t)return!JSON.parse(t).bookmarked||(b("Unbookmark failed."),!1)}else b("Auto-action disabled.")}async function j(t){var e="https://"+m.fedifollow_homeinstance+u+"/relationships?";for(const n of t)e+="id[]="+n.toString()+"&";var o=await k("GET",e,m.tokenheader),i=Array(t.length).fill(!1);if(o)for(var o=JSON.parse(o),a=0;a{var o=setInterval(function(){var t=$("body").html();t==i?(changing=!1,e(!0),clearInterval(o)):i=t},100)}),$(document).find("div.entry > div.status").each(function(){o($(this))})}),$(document).DOMNodeAppear(async function(t){var t=$(t.target),i=$("body").html();await new Promise(e=>{var o=setInterval(function(){var t=$("body").html();t==i?(changing=!1,e(!0),clearInterval(o)):i=t},100)}),t.find("div.status").each(async function(){document.body.contains($(this)[0])&&o($(this))}),z(t,{subtree:!0,childList:!0},["div.status"],function(t,e){o($(t))})},"article, div.entry > div.status")):b("There are no toots on this site")}async function I(){var t;a.test(g.split("?")[0])?(t=e.join(","),$(document).DOMNodeAppear(async function(t){!async function(a){var t,n,l,r,s="follow";if($(a).closest("div.account-card").length)t=$(a).closest("div.account-card").find("div.display-name > span").text().trim();else for(const e of o)if($(e).length){t=$(e).text().trim();break}t&&((n=await G(t))?(m.fedifollow_showfollows&&(await j([n[0]]))[0]&&($(a).text("Unfollow"),s="unfollow"),l=0,$(a).off(),$(a).unbind(),$(a).on("click",async function(t){var e,o,i;t.preventDefault(),t.stopImmediatePropagation(),1==++l?r=setTimeout(async function(){"follow"==s?await O(n[0])&&($(a).text("Unfollow"),s="unfollow"):await S(n[0])&&($(a).text("Follow"),s="follow"),l=0},350):(clearTimeout(r),"follow"==s?await O(n[0])&&($(a).text("Unfollow"),s="unfollow",e=!0):await S(n[0])&&($(a).text("Follow"),s="follow",e=!0),e?(o=$(a).text(),i="https://"+m.fedifollow_homeinstance+"/@"+n[1],$(a).text("Redirecting..."),setTimeout(function(){T(i),$(a).text(o)},1e3)):b("Action failed."),l=0)}).on("dblclick",function(t){t.preventDefault(),t.stopImmediatePropagation()})):b("Could not resolve user home ID."))}($(t.target))},t)):b("Not a profile URL.")}async function D(){setTimeout(function(){g!=window.location.href&&(g=window.location.href,I(),P()),D()},300)}function J(t){var e,o=[];for(e of t.split(/\r?\n/))e=e.trim(),i.test(e)?o.push(e):b("Removed invalid domain "+e+" from blacklist/whitelist.");return[...new Set(o)]}function L(){if(null==m.fedifollow_homeinstance||!m.fedifollow_homeinstance)return b("Mastodon home instance is not set."),!1;if(!m.fedifollow_token)return b("No API token available. Are you logged in to your home instance? If yes, wait for 1-2 minutes and reload page."),!1;if(m.tokenheader={Authorization:"Bearer "+m.fedifollow_token},!i.test(m.fedifollow_homeinstance))return b("Instance setting is not a valid domain name."),!1;if($.inArray(m.fedifollow_mode,["blacklist","whitelist"])<0&&(m.fedifollow_mode="blacklist"),$.inArray(m.fedifollow_target,["_blank","_self"])<0&&(m.fedifollow_target="_blank"),"whitelist"==m.fedifollow_mode){if(m.fedifollow_whitelist=J(m.fedifollow_whitelist),m.fedifollow_whitelist.length<1)return b("Whitelist is empty or invalid."),!1}else m.fedifollow_blacklist=J(m.fedifollow_blacklist);return!0}async function Q(){if(location.hostname!=m.fedifollow_homeinstance||(p=_("fedireply"))){if("whitelist"==m.fedifollow_mode){if($.inArray(location.hostname,m.fedifollow_whitelist)<0)return b("Current site is not in whitelist."),!1}else if(-1<$.inArray(location.hostname,m.fedifollow_blacklist))return b("Current site is in blacklist."),!1;var t=await k("GET",location.protocol+"//"+location.hostname+f,null);if(t)if(JSON.parse(t).uri)return!0;b("Does not look like a Mastodon instance.")}else b("Current site is your home instance.");return!1}async function X(){(m=await(browser||chrome).storage.local.get(v))?L()&&(await Q()?(p?B:(I(),P(),D))():b("Will not process this site.")):b("Could not load settings.")}X(); \ No newline at end of file diff --git a/src/nodeinserted.css b/src/nodeinserted.css index 01df9cc..b05e2d2 100644 --- a/src/nodeinserted.css +++ b/src/nodeinserted.css @@ -41,6 +41,7 @@ div.status, div.detailed-status__wrapper, +div.detailed-status__action-bar, article, div.account__header button.logo-button, div.public-account-header a.logo-button, diff --git a/src/nodeinserted.min.css b/src/nodeinserted.min.css index 6911fae..70e3e27 100644 --- a/src/nodeinserted.min.css +++ b/src/nodeinserted.min.css @@ -1 +1 @@ -@-moz-keyframes nodeInserted{from{opacity:1}to{opacity:1}}@-webkit-keyframes nodeInserted{from{opacity:1}to{opacity:1}}@-ms-keyframes nodeInserted{from{opacity:1}to{opacity:1}}@-o-keyframes nodeInserted{from{opacity:1}to{opacity:1}}@keyframes nodeInserted{from{opacity:1}to{opacity:1}}div.status,div.detailed-status__wrapper,article,div.account__header button.logo-button,div.public-account-header a.logo-button,div.account-card a.logo-button,div.directory-card a.icon-button,div.detailed-status a.logo-button{-webkit-animation-name:nodeInserted !important;-webkit-animation-duration:.001s !important;-ms-animation-name:nodeInserted !important;-ms-animation-duration:.001s !important;-moz-animation-name:nodeInserted !important;-moz-animation-duration:.001s !important;-o-animation-name:nodeInserted !important;-o-animation-duration:.001s !important;animation-name:nodeInserted !important;animation-duration:.001s !important} +@-moz-keyframes nodeInserted{from{opacity:1}to{opacity:1}}@-webkit-keyframes nodeInserted{from{opacity:1}to{opacity:1}}@-ms-keyframes nodeInserted{from{opacity:1}to{opacity:1}}@-o-keyframes nodeInserted{from{opacity:1}to{opacity:1}}@keyframes nodeInserted{from{opacity:1}to{opacity:1}}div.status,div.detailed-status__wrapper,div.detailed-status__action-bar,article,div.account__header button.logo-button,div.public-account-header a.logo-button,div.account-card a.logo-button,div.directory-card a.icon-button,div.detailed-status a.logo-button{-webkit-animation-name:nodeInserted !important;-webkit-animation-duration:.001s !important;-ms-animation-name:nodeInserted !important;-ms-animation-duration:.001s !important;-moz-animation-name:nodeInserted !important;-moz-animation-duration:.001s !important;-o-animation-name:nodeInserted !important;-o-animation-duration:.001s !important;animation-name:nodeInserted !important;animation-duration:.001s !important}