NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Twitter User Note
// @namespace http://github.com/mirogta/
// @version 0.0.1
// @description Add notes to Twitter users
// @author mirogta
// @license MIT
// @homepageURL https://github.com/mirogta/tampermonkey-twitter-usernote
// @match https://twitter.com/*
// @inject-into content
// @grant GM_getValue
// @grant GM_setValue
// @compatible firefox >=14
// @compatible chrome >=18
// ==/UserScript==
// ==OpenUserJS==
// @author mirogta
// ==/OpenUserJS==
(function() {
'use strict';
console.log(`Initialising Twitter User Note`);
const data = {
noteId: '_note',
};
let ob = new window.MutationObserver(function() {
console.debug(`- content changed`);
checkAndAddInputField();
});
function checkAndAddInputField() {
// find user section and add input field
const mainElement = document.getElementsByTagName('main');
if(mainElement && mainElement[0]) {
const container = mainElement[0].querySelector('a[role="link"]');
const noteEl = document.getElementById(data.noteId);
if(container && container.nextElementSibling && null == noteEl) {
console.log(`- adding user note input field`);
const newNoteEl = document.createElement('textarea');
newNoteEl.id = data.noteId;
newNoteEl.placeholder = 'Add custom note...';
newNoteEl.style = 'margin-top:10px; position: absolute; top: 2px; left: 160px;';
newNoteEl.addEventListener('change', saveNote, false);
container.nextElementSibling.append(newNoteEl);
}
loadNote();
}
}
function getUserUrl() {
const openGraphUrl = document.head.querySelector('meta[property="og:url"]');
if(openGraphUrl) {
return openGraphUrl.content;
}
return null;
}
function loadNote() {
const userUrl = getUserUrl();
const noteEl = document.getElementById(data.noteId);
if(noteEl && userUrl) {
const content = GM_getValue(userUrl);
if(content) {
console.log(`- found user note for ${userUrl}`);
noteEl.value = content;
} else {
noteEl.value = '';
}
}
}
function saveNote(event) {
const userUrl = getUserUrl();
if(userUrl) {
const content = event.target.value;
GM_setValue(userUrl, content);
console.log(`- saved user note for ${userUrl}`);
}
}
ob.observe(document, {
childList: true,
subtree: true,
});
})();