Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. // ==UserScript==
  2. // @name        Seenthis Quotator
  3. // @namespace   seenthis
  4. // @description Easy answering with quote
  5. // @include     http://seenthis.net/*
  6. // @include     https://seenthis.net/*
  7. // @version     3
  8. // @grant       none
  9. // ==/UserScript==
  10.  
  11.  
  12.  
  13. // Extrait le nom à afficher à partir de l'élément .auteur
  14. function extractAuthorTitle(elt){
  15.     var name = elt.find('strong').first().text().trim();
  16.     var login = elt.find('.login').first().text().trim();
  17.    
  18.     var nameRaw =   name.toLowerCase();
  19.     nameRaw = nameRaw.replace(RegExp('[ @_-]','g'), '');
  20.     var loginRaw = login.toLowerCase();
  21.     loginRaw = loginRaw.replace(RegExp('[ @_-]','g'), '');
  22.     if(nameRaw == loginRaw)
  23.         return login;
  24.     else
  25.         return name+' ('+login+')';
  26. }
  27.  
  28.  
  29.  
  30. function getSelectedText() {
  31.     var text = "";
  32.     if (window.getSelection) {
  33.         text = window.getSelection().toString();
  34.     } else if (document.selection && document.selection.type != "Control") {
  35.         text = document.selection.createRange().text;
  36.     }
  37.     return text.replace('▻','').replace('►','').replace(/^\s*\n/gm, "") ;
  38. }
  39.  
  40.  
  41. function scrollToElement(selector, time, verticalOffset) {
  42.     time = typeof(time) != 'undefined' ? time : 1000;
  43.     verticalOffset = typeof(verticalOffset) != 'undefined' ? verticalOffset : 0;
  44.     element = $(selector);
  45.     offset = element.offset();
  46.     offsetTop = offset.top + verticalOffset;
  47.     $('html, body').animate({
  48.         scrollTop: offsetTop
  49.     }, time);
  50. }
  51.  
  52. function addSelectedTextInAnswer(){
  53.  
  54. var selectedText = getSelectedText();
  55. console.log(selectedText);
  56.     if(selectedText.length > 0){
  57.         var selectNode = $(window.getSelection().anchorNode);
  58.     var cont = selectNode.parents('.reponse');
  59.     if(cont.length > 0){
  60.         var article = cont.find('article');
  61.         var textarea = article.parents('li[id^=message]').find('.formulaire_poster_message textarea');
  62.        
  63.         var author = extractAuthorTitle(article);
  64.         insertAtTextareaCursor(textarea,author+' \n❝'+selectedText+'❞\n');
  65.  
  66. }
  67.  
  68.             }
  69. }
  70.  
  71.  
  72.  
  73. function insertAtTextareaCursor(elt,text) {
  74.  
  75.     var txtarea = elt[0];
  76.  var scrollPos = txtarea.scrollTop;
  77.     var strPos = 0;
  78.     var br = ((txtarea.selectionStart || txtarea.selectionStart == '0') ?
  79.     "ff" : (document.selection ? "ie" : false ) );
  80.     if (br == "ie") {
  81.         txtarea.focus();
  82.         var range = document.selection.createRange();
  83.         range.moveStart ('character', -txtarea.value.length);
  84.         strPos = range.text.length;
  85.     }
  86.     else if (br == "ff") strPos = txtarea.selectionStart;
  87.    
  88.     var front = (txtarea.value).substring(0,strPos);
  89.     var back = (txtarea.value).substring(strPos,txtarea.value.length);
  90.     txtarea.value=front+text+back;
  91.     strPos = strPos + text.length;
  92.     if (br == "ie") {
  93.         txtarea.focus();
  94.         var range = document.selection.createRange();
  95.         range.moveStart ('character', -txtarea.value.length);
  96.         range.moveStart ('character', strPos);
  97.         range.moveEnd ('character', 0);
  98.         range.select();
  99.     }
  100.     else if (br == "ff") {
  101.         txtarea.selectionStart = strPos;
  102.         txtarea.selectionEnd = strPos;
  103.         txtarea.focus();
  104.     }
  105.     txtarea.scrollTop = scrollPos;
  106. }
  107.  
  108.  
  109.  
  110.  
  111. function openCommentInput(elt){
  112.     var textarea = elt.find('.formulaire_poster_message textarea').first();
  113.     if(! textarea.is(":visible")){
  114.         elt.find('.bouton_repondre a').click();
  115.     }
  116.  
  117.     scrollToElement(textarea,500,-200);
  118.         textarea.focus();
  119. }
  120.  
  121.  
  122. // Change le comportement de l'élément @login sous un commentaire
  123. // cliquer sur le login l'insert dans le champ de réponse
  124. $('li[id^=message]').find('.auteur a').click(function(){
  125.  
  126. var login = extractAuthorTitle($(this).parent())+ ' ';
  127. var selTxt = getSelectedText();
  128. var areaTxt = login;
  129. if(selTxt.length>0){
  130. areaTxt += "\n❝"+ getSelectedText()+"❞";
  131. }
  132. openCommentInput($(this).parents('li[id^=message]'));
  133. insertAtTextareaCursor($(this).parents('li[id^=message]').find('.formulaire_poster_message textarea'),areaTxt);
  134. return false;
  135. });
  136.  
  137.  
  138. // Ajoute un comportement sur Ctrl + Alt + Shift + R
  139. // insert dans le champ de réponse le texte sélectionné ainsi que son auteur
  140. $(document).keydown(function(e) {
  141.     if(e.which == 82 && e.altKey && e.ctrlKey) {
  142.     var article = $(window.getSelection().anchorNode).parents('li[id^=message]');
  143.     if(article.length > 0){
  144.         addSelectedTextInAnswer();
  145.         openCommentInput(article);
  146.     }
  147.     }
  148. });