NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name AvenoelExt
// @author ImThatGuy
// @description Extension pour Avenoel
// @include https://avenoel.org/*
// @require https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js
// @require https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js
// @require https://cdnjs.cloudflare.com/ajax/libs/jquery-modal/0.8.0/jquery.modal.min.js
// @require https://cdnjs.cloudflare.com/ajax/libs/sweetalert/1.1.3/sweetalert.min.js
// @require https://jvcpremium.000webhostapp.com/files/remodal.min.js
// @require https://raw.githubusercontent.com/avxto/nuContextMenu/master/src/jquery.nu-context-menu.js
// @require https://cdnjs.cloudflare.com/ajax/libs/qtip2/3.0.3/jquery.qtip.min.js
// @grant GM_addStyle
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_xmlhttpRequest
// @grant GM_getResourceText
// @grant GM_getResourceURL
// @version 0.4
// @icon https://i.imgur.com/JtPB5IO.png
// @copyright 2018+, ImThatGuy
// @license MIT
// ==/UserScript==
/*
Avenoel extension. 2017-2018.
Developpé par ImThatGuy.
2018+, ImThatGuy.
Changelog
Version 0.1 : 1ère version.
Version 0.2 : Correction de bugs
Ajout d'une notification dans l'onglet quand un nouveau msg est posté
Focus automatique du textarea après citation
Version 0.3 : Correction bouton actualiser depuis m.a.j avenoel
Nouveau système pour ajouter un sticker perso
Version 0.4 : Correction ajout de stickers risibank / aperçu url
*/
/*jshint multistr: true */
(function() {
'use strict';
const version = '0.4';
// CSS import
$('head').append('<link rel="stylesheet" type="text/css" href="https://jvcpremium.000webhostapp.com/files/nu-context-menu.css"/>');
$('head').append('<link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"/>');
$('head').append('<link rel="stylesheet" type="text/css" href="https://jvcpremium.000webhostapp.com/files/remodal.css"/>');
$('head').append('<link rel="stylesheet" type="text/css" href="https://jvcpremium.000webhostapp.com/files/remodal-default-theme.css"/>');
$('head').append('<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/qtip2/3.0.3/jquery.qtip.css"/>');
$('head').append('<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/pretty-checkbox@3.0/dist/pretty-checkbox.min.css"/>');
$("head").append('<link href="//ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/base/jquery-ui.css" rel="stylesheet" type="text/css">');
// First time execute the script
var firstTime = GM_getValue('firstTime');
if (firstTime === undefined) {firstTime = true;}
if (firstTime) { // Set all stored values
GM_setValue("dragndrop", false);
GM_setValue("refreshbtn", true);
GM_setValue("tooltips", true);
GM_setValue("notifs", true);
}
GM_setValue("firstTime", false);
// OPTIONS
var HEIGHT = "120"; // Hauteur du cadre en pixels
var STICKERS_MAX = "60"; // Taille max des stickers en pixels
//
var dragNDrop = GM_getValue("dragndrop");
var refreshBtn = GM_getValue("refreshbtn");
var tooltips = GM_getValue("tooltips");
var notifs = GM_getValue("notifs");
// Variables
var focusRisitas = true;
var stickers = [
'http://image.noelshack.com/fichiers/2016/46/1479639726-1467231909-1466015251-esp.png',
'http://image.noelshack.com/fichiers/2016/24/1466366197-risitas10.png',
'http://image.noelshack.com/fichiers/2016/36/1473263674-jesus5.png',
'http://image.noelshack.com/fichiers/2016/46/1479341443-issou.gif',
'http://image.noelshack.com/fichiers/2016/30/1469971032-risitas246.png',
'http://image.noelshack.com/fichiers/2016/26/1467335935-jesus1.png',
'http://image.noelshack.com/fichiers/2016/38/1474488554-jesus18.png',
'https://image.noelshack.com/fichiers/2017/21/1495823618-risitas596.png',
'http://image.noelshack.com/fichiers/2016/24/1466366209-risitas24.png',
'http://image.noelshack.com/fichiers/2016/30/1469541957-risitas198.png',
'http://image.noelshack.com/fichiers/2016/38/1474490238-risitas440.png',
'http://image.noelshack.com/fichiers/2016/30/1469541952-risitas182.png',
'http://image.noelshack.com/fichiers/2016/24/1466366602-risitas94.png',
'http://image.noelshack.com/fichiers/2017/14/1491484186-risitasueur.png',
'http://image.noelshack.com/fichiers/2016/38/1474488637-jesus26.png',
'http://image.noelshack.com/fichiers/2016/38/1474490303-risitas468.png',
'http://image.noelshack.com/fichiers/2016/32/1470920801-jesus17.png',
'http://image.noelshack.com/fichiers/2016/38/1474488564-jesus38.png',
'http://image.noelshack.com/fichiers/2016/38/1474719470-risitas626.png',
'http://image.noelshack.com/fichiers/2016/38/1474488632-jesus27.png',
'http://image.noelshack.com/fichiers/2016/38/1474794851-risitas766.gif',
'http://image.noelshack.com/fichiers/2016/30/1469541959-risitas206.png',
'http://image.noelshack.com/fichiers/2016/38/1474488555-jesus24.png',
'http://image.noelshack.com/minis/2016/30/1469561699-1466004337-reupload-3-2.png',
'http://image.noelshack.com/fichiers/2016/47/1480064732-1467335935-jesus4.png',
'http://image.noelshack.com/fichiers/2016/24/1466366261-risitas51.png',
'http://image.noelshack.com/fichiers/2016/32/1470920800-jesus14.png',
'http://image.noelshack.com/fichiers/2016/24/1466366648-risitas115.png',
'http://image.noelshack.com/fichiers/2016/24/1466366339-risitas39.png',
'http://image.noelshack.com/fichiers/2016/46/1479465472-risitaspc.png',
'http://image.noelshack.com/fichiers/2016/38/1474719464-risitas614.png',
'http://image.noelshack.com/fichiers/2016/38/1474719465-risitas615.png',
'http://image.noelshack.com/fichiers/2016/30/1469541976-risitas216.png',
'http://image.noelshack.com/fichiers/2016/24/1466366188-risitas6.png',
'http://image.noelshack.com/fichiers/2016/24/1466366306-risitas52.png',
'http://image.noelshack.com/fichiers/2016/30/1469971038-risitas258.png',
'http://image.noelshack.com/fichiers/2016/38/1474490319-risitas575.png',
'http://image.noelshack.com/fichiers/2016/38/1474797359-risitas770.gif',
'http://image.noelshack.com/fichiers/2016/38/1474490319-risitas574.png',
'http://image.noelshack.com/fichiers/2016/47/1479858878-1466366212-risitas32.png',
'http://image.noelshack.com/fichiers/2016/38/1474719466-risitas617.png',
'http://image.noelshack.com/fichiers/2016/38/1474719465-risitas616.png',
'http://image.noelshack.com/fichiers/2016/30/1469541968-risitas225.png',
'http://image.noelshack.com/fichiers/2016/30/1469541970-risitas226.png',
'http://image.noelshack.com/fichiers/2016/30/1469541968-risitas224.png',
'http://image.noelshack.com/fichiers/2016/30/1469541969-risitas227.png',
'http://image.noelshack.com/fichiers/2016/30/1469541969-risitas228.png',
'http://image.noelshack.com/fichiers/2016/38/1474488573-jesus49.png',
'http://image.noelshack.com/fichiers/2016/46/1479465083-jesusetrsitas.png',
'http://image.noelshack.com/fichiers/2016/38/1474490292-risitas493.png',
'http://image.noelshack.com/fichiers/2016/38/1474488574-jesus50.png',
'http://image.noelshack.com/fichiers/2016/24/1466366203-risitas21.png',
'http://image.noelshack.com/fichiers/2016/38/1474490239-risitas441.png',
'http://image.noelshack.com/fichiers/2017/03/1484921410-1466366200-risitas13.png',
'http://image.noelshack.com/fichiers/2016/24/1466366296-risitas60.png',
'http://image.noelshack.com/fichiers/2016/38/1474490330-risitas566.png',
'http://image.noelshack.com/fichiers/2016/38/1474797331-risitas768.png',
'http://image.noelshack.com/fichiers/2016/32/1470920814-jesus10.png',
'http://image.noelshack.com/fichiers/2016/24/1466366342-risitas59.png',
'http://image.noelshack.com/fichiers/2016/24/1466366197-risitas11.png',
'http://image.noelshack.com/fichiers/2016/38/1474490326-risitas582.png',
'http://image.noelshack.com/fichiers/2016/26/1467309317-risitas157.png',
'http://image.noelshack.com/fichiers/2016/38/1474755095-risitas719.png',
'http://image.noelshack.com/fichiers/2016/50/1482027315-perplexe.png',
'http://image.noelshack.com/fichiers/2016/50/1481985771-gendarmedeuxsucres.png',
'http://image.noelshack.com/fichiers/2016/47/1480092147-1477945635-1465556572-elrisitassticker3-copy.png',
'http://image.noelshack.com/fichiers/2016/48/1480373367-issddou.png',
'http://image.noelshack.com/fichiers/2016/49/1481140349-jesus.png',
'http://image.noelshack.com/fichiers/2016/49/1481140358-jesusdd2.png',
'http://image.noelshack.com/fichiers/2016/41/1476374797-picsart-10-13-05-19-26.jpg',
'http://image.noelshack.com/fichiers/2016/48/1480747401-picsart-12-03-07-36-33.jpg',
'http://image.noelshack.com/fichiers/2016/48/1480747392-picsart-12-03-07-22-54.jpg',
'http://image.noelshack.com/fichiers/2017/04/1485686507-risddb.png',
'http://image.noelshack.com/fichiers/2017/02/1484127482-jesusah2.png',
'http://image.noelshack.com/fichiers/2015/49/1448914032-elrisitasgif.gif',
'http://image.noelshack.com/fichiers/2017/33/2/1502805310-jesus-hd-2.png'
];
var stickers_perso; // Stickers personnels
try {
stickers_perso = JSON.parse(GM_getValue("stickers-p-ave"));
} catch (err) {
stickers_perso = [];
}
var postContents = []; // All .post-content textarea
// Functions
function getTopicId() {
var id = window.location.href.split("/")[4].split("-")[0];
return id;
}
// Notif
var documentTitle = document.title;
var lastmsg = "";
var notifNb = 0;
function notifCheck(id) {
GM_xmlhttpRequest({
method: "GET",
url: "https://avenoel.org/api/v1/topics/"+id,
headers: {
"Content-Type": "application/x-www-form-urlencoded"
},
onload: function(response) {
//console.log(response.responseText);
var result = JSON.parse(response.responseText);
//console.log(result);
//alert(lastmsg);
if (result.data.updated_at != lastmsg) {
if (lastmsg !== "") {
document.title = "("+notifNb+") " + documentTitle;
}
lastmsg = result.data.updated_at;
notifNb += 1;
}
}
});
}
// Liste des sujets
function listeSujets() {
if ( $(".primary-page-title").length ) {
return true;
} else {
return false;
}
}
// Append last realtime
function appendSticker(b) {
$(".sticker-dernier").attr("src", b);
}
// Define last sticker
var dernierSticker;
function defineDernierSticker() {
dernierSticker = GM_getValue('dernierSticker');
}
defineDernierSticker();
function getPostContent() {
$('.post-content[name="content"]').each(function() {
postContents.push( $(this) );
//alert($(this));
});
}
getPostContent();
// Add sticker
function addSticker(sticker) {
for (var i=0; i < postContents.length; i++) {
var $textarea = postContents[i];
var caretPos = $textarea[0].selectionStart;
var textAreaTxt = $textarea.val();
var txtToAdd = sticker + ' ';
$textarea.val(textAreaTxt.substring(0, caretPos) + txtToAdd + textAreaTxt.substring(caretPos) );
$textarea.focus();
}
// Last sticker
GM_setValue('dernierSticker', sticker); // Défini le dernier sticker utilisé
defineDernierSticker();
if (dernierSticker !== undefined) {
appendSticker(sticker);
}
}
// Display stickers
function displayStickers(stickers_list) {
$(".stickers-i").empty();
// Dernier sticker
if (dernierSticker !== undefined) {
$('.stickers-i').prepend('<img title="Dernier sticker utilisé" class="sticker-dernier" style="border:1px solid #9b9b9b;" src="'+dernierSticker+'">');
}
if (focusRisitas === false) {
if (stickers_list.length <= 0) {
$(".stickers-i").append("<i>Vous n'avez pas de stickers personnels.</i>");
}
}
for (var i=0; i<stickers_list.length;i++)
{
if (focusRisitas === false) {
$(".stickers-i").append('<img id="stickerperso" class="stickers-cadre" src="'+stickers_list[i]+'">');
} else {
$(".stickers-i").append('<img class="stickers-cadre" src="'+stickers_list[i]+'">');
}
}
stickersListeners();
}
function addStickerToList(sticker) {
stickers_perso.push(sticker);
GM_setValue("stickers-p-ave", JSON.stringify(stickers_perso));
location.reload();
}
function setOption(option) {
if (GM_getValue(option) === true) {
GM_setValue(option, false);
} else {
GM_setValue(option, true);
}
}
function isChecked(option) {
if (GM_getValue(option)) {
return "checked";
} else {
return "";
}
}
// Append
// Remodal
$("body").append('<div class="remodal" data-remodal-id="modal">\
<button data-remodal-action="close" class="remodal-close"></button>\
<h1>AvenoelExt v'+version+' options</h1><hr>\
\
<div class="pretty p-default"><input class="option-ave form-control" option="refreshbtn" type="checkbox" '+isChecked("refreshbtn")+'>\
<div class="state"><label>Bouton actualiser</label></div></div><hr>\
\
<div class="pretty p-default"><input class="option-ave form-control" option="dragndrop" type="checkbox" '+isChecked("dragndrop")+'>\
<div class="state"><label>Drag and drop stickers</label></div></div><hr>\
\
<div class="pretty p-default"><input class="option-ave form-control" option="tooltips" type="checkbox" '+isChecked("tooltips")+'>\
<div class="state"><label>Tooltips</label></div></div><hr>\
\
<div class="pretty p-default"><input class="option-ave form-control" option="notifs" type="checkbox" '+isChecked("notifs")+'>\
<div class="state"><label>Notifications</label></div></div><hr>\
\
<button data-remodal-action="confirm" class="remodal-confirm">OK</button>\
</div>');
var inst = $('[data-remodal-id=modal]').remodal(); // Remodal init
// Main append
$(".bbcodes").append('<span title="Options" class="glyphicon glyphicon-option-vertical options-i"></span> \
<span title="Ajouter un sticker personnel" class="glyphicon glyphicon-plus stickers-add"></span> \
<span title="Effacer ma liste de sticker personnels" class="glyphicon glyphicon-trash stickers-remove"></span> \
<span title="Changer de liste de stickers" class="glyphicon glyphicon-folder-open stickers-change"></span>\
<div id="drop-i">Déposer un sticker ici</div>\
<div class="stickers-i"></div>\
');
// Append boutons posts
$(".message-actions").append('<li><span title="Ajouter un sticker personnel" class="glyphicon glyphicon-download add-sticker-p"></span></li>');
displayStickers(stickers);
// Focus msg quand citation
$(".message-quote").click(function() {
setTimeout(function() {
var $textarea = postContents[postContents.length-1];
//console.log($textarea);
$textarea.focus();
}, 200);
});
// Notif si nouveau msg est ajouté
if (!listeSujets()) {
if (notifs) {
setInterval(function() {
notifCheck(getTopicId());
}, 2000);
}
}
// Add refresh button
if (!listeSujets()) {
if (refreshBtn) {
// Depuis update avenoel
$(".grey-btn").each(function() {
if ( $(this).html() == '<i class="glyphicon glyphicon-refresh"></i>' ) {
$(this).remove();
}
});
// Ajoute le btn
$(".btn-primary").each(function() {
if ( $(this).attr("href") == "https://avenoel.org/forum" ) {
$('<a style="float:right" class="btn btn-primary" onclick="location.reload()">Actualiser</a>').insertAfter(this);
}
});
}
}
// Drag n drop
if (!dragNDrop) {
setTimeout(function() {
$("div#drop-i").remove();
}, 10);
}
if (!listeSujets()) {
if (dragNDrop) {
$(".message-content img").draggable({
//containment : '.topic-messages'
revert : 'invalid',
drag : function() {
$("html, body").animate({ scrollTop: $(document).height() }, "slow");
/*
$('html, body').stop().animate({
scrollTop: $("div#drop-i").offset().top
}, 650);
*/
}
});
$('div#drop-i').droppable({
accept : 'img',
drop : function (e, ui) {
addStickerToList(
$(ui.draggable).attr("src")
);
}
});
}
}
$(".apercite-image").find("img").addClass("preview-del"); // Class pour delete aperçu url
// Add sticker posts
$("body").append('<div id="dialog"></div>');
$(".add-sticker-p").click(function() {
var b = $(this).parents().closest(".message-wrapper").find(".message-content").first().find("img");
var permalink = $(this).parents().closest(".message-wrapper").find(".message-footer").first().find(".message-permalink").attr("href");
//console.log(b);
$("#dialog").empty();
$("#dialog").append('<span style="font-size:12px;">Clique sur un sticker pour l\'ajouter à ta liste personnel</span><hr>');
if (b.length > 0) {
b.each(function() {
if ($(this).attr("class") == "smiley" || $(this).attr("class") == "risi-fav-button" || $(this).attr("class") == "preview-del") {
//$(this).remove();
} else {
$("#dialog").append('<img class="st-add-p" src="'+$(this).attr("src")+'">');
}
});
$(".st-add-p").click(function() {
addStickerToList($(this).attr("src"));
});
} else {
$("#dialog").empty().append("Ce post ne contient aucun sticker.");
}
if ($("#dialog").find(".st-add-p").length <= 0) {
$("#dialog").empty().append("Ce post ne contient aucun sticker.");
}
$("#dialog").dialog({
title: "Sticker(s) du post "+permalink,
width: 400,
height: 250,
modal: true,
open: function(event, ui) {
$(".ui-widget-overlay").click(function() {
$("#dialog").dialog('close');
});
}
});
});
// Listeners
function stickersListeners() {
$(".stickers-cadre, .sticker-dernier").click(function() {
addSticker($(this).attr("src"));
});
}
$(".stickers-change").click(function() {
if (focusRisitas === true) {
focusRisitas = false;
displayStickers(stickers_perso);
} else {
focusRisitas = true;
displayStickers(stickers);
}
});
// Options
$(".options-i").click(function() {
inst.open();
});
$(document).on('confirmation', '.remodal', function (e) {
location.reload();
});
// Delete stickers
$(".stickers-remove").click(function() {
if ( confirm("Etes-vous sûr de vouloir supprimer tous vos stickers personnels ?") ) {
GM_setValue("stickers-p-ave", "[]");
location.reload();
}
});
// Add sticker
$(".stickers-add").click(function() {
var b = prompt("Lien direct du sticker");
if (b) {
stickers_perso.push(b);
GM_setValue("stickers-p-ave", JSON.stringify(stickers_perso));
location.reload();
}
});
// Set option
$(".option-ave").click(function() {
setOption( $(this).attr("option") );
});
// Context menu
$(function() {
var context = $('body').nuContextMenu({
hideAfterClick: true,
items: '.stickers-cadre',
callback: function(key, element) {
if (key == "delete") {
if ( $(element).attr("id") == "stickerperso" ) {
$(element).remove();
var stickerPersoDel = stickers_perso.indexOf($(element).attr("src"));
if (stickerPersoDel > -1) {
stickers_perso.splice(stickerPersoDel, 1);
}
GM_setValue("stickers-p-ave", JSON.stringify(stickers_perso));
location.reload();
} else {
alert("Vous ne pouvez pas supprimer ce sticker");
}
} else if ( key == 'download' ) {
var a = document.createElement('a');
a.href = element.src;
a.download = element.src;
a.style.display = 'none';
document.body.appendChild(a);
a.click();
} else if ( key == 'reply' ) {
addSticker($(element).attr("src"));
}
},
menu: [
{
name: 'download',
title: 'Télécharger',
icon: 'download',
},
{
name: 'reply',
title: 'Ajouter à mon post',
icon: 'reply',
},
{
name: 'void'
},
{
name: 'delete',
title: 'Supprimer',
icon: 'trash',
},
]
});
});
// Tooltips
/*
$('.sticker-dernier').qtip({
content: {
text: 'Dernier sticker utilisé'
},
style: {
classes: 'qtip-light'
//classes: 'qtip-tipsy'
},
position: {
my: 'top left',
at: 'bottom center'
}
});
*/
if (tooltips) {
$('[title!=""]').qtip({
style: {
classes: 'qtip-light'
//classes: 'qtip-tipsy'
},
position: {
my: 'top left',
at: 'bottom center'
}
});
}
// CSS
GM_addStyle(".stickers-cadre, .sticker-dernier { max-height: "+STICKERS_MAX+"px; max-width: "+STICKERS_MAX+"px; opacity: 0.7; cursor: pointer; }\
.stickers-cadre:hover, .sticker-dernier:hover { opacity: 1 }\
.stickers-i { width: 100%; height: "+HEIGHT+"px; overflow: auto; }\
#drop-i { border-top : 1px solid #ccc; border-bottom : 1px solid #ccc; height : 40px; text-align: center; cursor: pointer }\
.stickers-change, .stickers-remove, .options-i, .stickers-add { cursor: pointer; float: right; margin-right: 15px; margin-top: 7px; }\
.add-sticker-p { cursor: pointer; color: #494949; font-size: 21px; vertical-align: middle; margin-left: 3px; }\
.st-add-p { cursor : pointer; max-height: 70px; max-width: 70px; margin-right: 5px; border-bottom: 2px solid #ccc; }\
.st-add-p:active { opacity: 0.7 }\
.st-add-p:hover { border-color: #494949; }\
");
})();