Skip to content

Instantly share code, notes, and snippets.

@libraplanet
Last active April 20, 2020 22:57
Show Gist options
  • Save libraplanet/f58b58e1b38399bfdcbe5b4615ba69af to your computer and use it in GitHub Desktop.
Save libraplanet/f58b58e1b38399bfdcbe5b4615ba69af to your computer and use it in GitHub Desktop.
!media tweet sertch link helper for id
// ==UserScript==
// @name media tweet sertch link helper for id
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match https://twitter.com/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
// Your code here...
const BASE_TGT_SELECTOR_LIST = [
// account page.
'main div[data-testid="primaryColumn"] div.r-15d164r.r-1g94qm0 div.r-18u37iz.r-1wbh5a2',
// tweets.
'main div[data-testid="primaryColumn"] article div[data-testid=tweet] div.css-1dbjc4n.r-18u37iz.r-1wbh5a2',
// recommended users
'main div[data-testid="primaryColumn"] section div[data-testid="UserCell"]',
];
const STYLE_CLASS_SEARCH_VALIDATE_ID = 'searchValidateId';
const STYLE_CLASS_SEARCH_LINK_CONTENTS = 'searchLinkContents';
const ELM_DATA_SEARCH_VALIDATE_ID = 'data-search_validate_id';
let createImageSearchUrl = function(twId, appendQueryTextList){
let url = '/search?f=live';
let queryTextSrc = 'from:' + twId;
let queryTextEnc;
Array.prototype.forEach.call(appendQueryTextList, function(q){
queryTextSrc += ' ' + q;
});
queryTextSrc += ' ';
queryTextEnc = encodeURIComponent(queryTextSrc);
url += '&q=' + queryTextEnc;
return url;
};
let createSpan = function(text, href, classList){
let span = document.createElement('span');
Array.prototype.forEach.call(classList, function(styleClass){
span.classList.add(styleClass);
});
if(href) {
let a = document.createElement('a');
a.href = href;
//a.target = '_blank';
a.text = text;
// font
a.classList.add('r-gwet1z');
// color
[
// bllue
'r-1n1174f',
// yellow
'r-daml9f',
// red
'r-61mi1v',
// purple
'r-1n1174f',
// orange
'r-1qkqhnw',
// green
'r-nw8l94',
].forEach(function(style){
a.classList.add(style);
});
// underline
a.classList.add('css-4rbku5');
// add underline when a:hover.
a.addEventListener('mouseover', function(e) {
a.style.textDecorationLine = 'underline';
}, false);
a.addEventListener('mouseout', function(e) {
a.style.textDecorationLine = '';
}, false);
span.appendChild(a);
} else {
span.text = text;
}
return span;
};
let createFunc = function() {
let list = [];
Array.prototype.forEach.call(BASE_TGT_SELECTOR_LIST, function(baseSelector){
let selector = baseSelector;
selector += ' div[dir="ltr"]:not([' + ELM_DATA_SEARCH_VALIDATE_ID + '])';
selector += ' span:not([title])';
document.querySelectorAll(selector).forEach(function(elm){
list.push(elm);
});
});
Array.prototype.forEach.call(list, function(e){
let twidSpan = e;
let parentNode = e.parentNode;
let twId = twidSpan.innerText
let createLinsSpan = function(displayText, queryTextList, styleClassList) {
let href = createImageSearchUrl(twId, queryTextList);
let span = createSpan(displayText, href, styleClassList);
return span;
};
// create link element.
parentNode.appendChild(createLinsSpan('🖼️', ['filter:images'], ['r-zso239', STYLE_CLASS_SEARCH_LINK_CONTENTS, 'searchLinkImages']));
parentNode.appendChild(createLinsSpan('🎥', ['filter:videos'], ['r-zso239', STYLE_CLASS_SEARCH_LINK_CONTENTS, 'searchLinkVideos']));
// right pad.
twidSpan.classList.add('r-zso239');
// searched mark.
twidSpan.classList.add(STYLE_CLASS_SEARCH_VALIDATE_ID);
parentNode.setAttribute(ELM_DATA_SEARCH_VALIDATE_ID, twId);
});
}
let validateFunc = function() {
let list = [];
Array.prototype.forEach.call(BASE_TGT_SELECTOR_LIST, function(baseSelector){
let selector = baseSelector;
selector += ' div[dir="ltr"][' + ELM_DATA_SEARCH_VALIDATE_ID + ']';
selector += ' span:not([title]).' + STYLE_CLASS_SEARCH_VALIDATE_ID;
document.querySelectorAll(selector).forEach(function(elm){
list.push(elm);
});
});
Array.prototype.forEach.call(list, function(e){
let twidSpan = e;
let parentNode = e.parentNode;
let currentTwId = twidSpan.innerText
let validateTwId = parentNode.getAttribute(ELM_DATA_SEARCH_VALIDATE_ID);
if(currentTwId != validateTwId) {
console.log('currentTwId=' + currentTwId + '');
console.log('validateTwId=' + validateTwId + '');
parentNode.querySelectorAll('span.' + STYLE_CLASS_SEARCH_LINK_CONTENTS).forEach(function (span){
span.parentNode.removeChild(span);
});
twidSpan.classList.remove(STYLE_CLASS_SEARCH_VALIDATE_ID);
parentNode.removeAttribute(ELM_DATA_SEARCH_VALIDATE_ID);
console.log('removed serch id.');
}
});
};
document.debugCreateSearchLnk = createFunc;
document.debugValidateSearchLnk = validateFunc;
//setInterval(createFunc, 1000);
//setInterval(validateFunc, 1000);
setInterval(function() {
validateFunc();
createFunc();
}, 1000);
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment