// ==UserScript==
// @name Seenthis Quotator
// @namespace seenthis
// @description Easy answering with quote
// @include http://seenthis.net/*
// @include https://seenthis.net/*
// @version 3
// @grant none
// ==/UserScript==
// Extrait le nom à afficher à partir de l'élément .auteur
function extractAuthorTitle(elt){
var name = elt.find('strong').first().text().trim();
var login = elt.find('.login').first().text().trim();
var nameRaw = name.toLowerCase();
nameRaw = nameRaw.replace(RegExp('[ @_-]','g'), '');
var loginRaw = login.toLowerCase();
loginRaw = loginRaw.replace(RegExp('[ @_-]','g'), '');
if(nameRaw == loginRaw)
return login;
else
return name+' ('+login+')';
}
function getSelectedText() {
var text = "";
if (window.getSelection) {
text = window.getSelection().toString();
} else if (document.selection && document.selection.type != "Control") {
text = document.selection.createRange().text;
}
return text.replace('▻','').replace('►','').replace(/^\s*\n/gm, "") ;
}
function scrollToElement(selector, time, verticalOffset) {
time = typeof(time) != 'undefined' ? time : 1000;
verticalOffset = typeof(verticalOffset) != 'undefined' ? verticalOffset : 0;
element = $(selector);
offset = element.offset();
offsetTop = offset.top + verticalOffset;
$('html, body').animate({
scrollTop: offsetTop
}, time);
}
function addSelectedTextInAnswer(){
var selectedText = getSelectedText();
console.log(selectedText);
if(selectedText.length > 0){
var selectNode = $(window.getSelection().anchorNode);
var cont = selectNode.parents('.reponse');
if(cont.length > 0){
var article = cont.find('article');
var textarea = article.parents('li[id^=message]').find('.formulaire_poster_message textarea');
var author = extractAuthorTitle(article);
insertAtTextareaCursor(textarea,author+' \n❝'+selectedText+'❞\n');
}
}
}
function insertAtTextareaCursor(elt,text) {
var txtarea = elt[0];
var scrollPos = txtarea.scrollTop;
var strPos = 0;
var br = ((txtarea.selectionStart || txtarea.selectionStart == '0') ?
"ff" : (document.selection ? "ie" : false ) );
if (br == "ie") {
txtarea.focus();
var range = document.selection.createRange();
range.moveStart ('character', -txtarea.value.length);
strPos = range.text.length;
}
else if (br == "ff") strPos = txtarea.selectionStart;
var front = (txtarea.value).substring(0,strPos);
var back = (txtarea.value).substring(strPos,txtarea.value.length);
txtarea.value=front+text+back;
strPos = strPos + text.length;
if (br == "ie") {
txtarea.focus();
var range = document.selection.createRange();
range.moveStart ('character', -txtarea.value.length);
range.moveStart ('character', strPos);
range.moveEnd ('character', 0);
range.select();
}
else if (br == "ff") {
txtarea.selectionStart = strPos;
txtarea.selectionEnd = strPos;
txtarea.focus();
}
txtarea.scrollTop = scrollPos;
}
function openCommentInput(elt){
var textarea = elt.find('.formulaire_poster_message textarea').first();
if(! textarea.is(":visible")){
elt.find('.bouton_repondre a').click();
}
scrollToElement(textarea,500,-200);
textarea.focus();
}
// Change le comportement de l'élément @login sous un commentaire
// cliquer sur le login l'insert dans le champ de réponse
$('li[id^=message]').find('.auteur a').click(function(){
var login = extractAuthorTitle($(this).parent())+ ' ';
var selTxt = getSelectedText();
var areaTxt = login;
if(selTxt.length>0){
areaTxt += "\n❝"+ getSelectedText()+"❞";
}
openCommentInput($(this).parents('li[id^=message]'));
insertAtTextareaCursor($(this).parents('li[id^=message]').find('.formulaire_poster_message textarea'),areaTxt);
return false;
});
// Ajoute un comportement sur Ctrl + Alt + Shift + R
// insert dans le champ de réponse le texte sélectionné ainsi que son auteur
$(document).keydown(function(e) {
if(e.which == 82 && e.altKey && e.ctrlKey) {
var article = $(window.getSelection().anchorNode).parents('li[id^=message]');
if(article.length > 0){
addSelectedTextInAnswer();
openCommentInput(article);
}
}
});