Solon / DC-DMOFilter

// ==UserScript==
// @name         DC-DMOFilter
// @author       Solon
// @match        http://www.dreadcast.net/Forum/DMOFilter
// @require      http://cdn.datatables.net/1.10.12/js/jquery.dataTables.js
// @resource     dataTables_css http://cdn.datatables.net/1.10.12/css/jquery.dataTables.css
// @grant        GM_addStyle
// @grant        GM_getResourceText
// @description  Moyen de recherche des liens postés sur Dans mes oreilles de DreadCast.net (liens Youtube)
// @version      1.2.9
// ==/UserScript==


(function() {
    'use strict';

    var json_id = "57adc4f6e4b0dc55a4ec70c6";
    var DMO_url = "http://www.dreadcast.net/Forum/2-11063-dans-mes-oreilles";
    var DMOFilter_url = "http://www.dreadcast.net/Forum/DMOFilter";

    var dataTables_css = GM_getResourceText("dataTables_css");
    GM_addStyle (dataTables_css);

    var language_setup = {
        "decimal":        "",
        "emptyTable":     "Pas de données disponibles",
        "info":           "Lignes _START_ à _END_ sur _TOTAL_ résultats",
        "infoEmpty":      "Lignes 0 à 0 sur 0 résultats",
        "infoFiltered":   "(avec filtre sur _MAX_ lignes)",
        "infoPostFix":    "",
        "thousands":      " ",
        "lengthMenu":     "Afficher _MENU_ lignes",
        "loadingRecords": "Chargement...",
        "processing":     "Traitement...",
        "search":         "Recherche :",
        "zeroRecords":    "Pas de résultats",
        "paginate": {
            "first":      "Premier",
            "last":       "Dernier",
            "next":       "Suivant",
            "previous":   "Précédent"
        },
    };

    var $thumbnail_div = $('<div />').appendTo($('body'));
    $thumbnail_div.css({
        position: 'absolute',
        top: '0',
        left: '0',
        "z-index":'9999999999',
    });
    var $thumbnail_img = $('<img src=""/>').appendTo($thumbnail_div);
    $thumbnail_img.css({
        width : '240px',
        height : '180px',
    });
    $thumbnail_div.hide();

    var $vcontainer = $('<div />');
    $vcontainer.css({
        position: 'relative',
        "text-align":'center',
        margin: '20px auto'
    });
    $vcontainer.hide();

    forum.DMOFilter_showThumbnail = function(data){
        $thumbnail_img.attr('src',data);
        $thumbnail_div.show();
    };

    forum.DMOFilter_hideThumbnail = function(){
        $thumbnail_img.attr('src','');
        $thumbnail_div.hide();
    };

    forum.DMOFilter_setYoutubeVideo = function(url){
        $.getJSON("https://noembed.com/embed?callback=?", {"format": "json", "url": url}, function (data) {
            $vcontainer.html(data.html);
            $vcontainer.find('iframe').attr('src', $vcontainer.find('iframe').attr('src')+'&autoplay=1' );
            $('.noembed-meta-info').remove();
            $vcontainer.show();
        });
    };

    $(document).ready(function() {
        console.log('[DC-DMOFilter] Démarrage de DMO Filter');

        document.title = 'DMOFilter';
        $('#header_accueil').find('h1').text('DMO Filter');
        $('.forum_description').text('Filtrage de Mes oreilles');

        $(document).mousemove(function (e) {
            $thumbnail_div.offset({ top: e.pageY + 20, left: e.pageX + 20});
        });

        $('#liste_forums').remove();
        var $container = $('<div />').insertAfter('#header_accueil');
        $container.css({
            margin:'20px 0'
        });

        $vcontainer.appendTo($container);

        var $table = $('<table id="DMO_table" />').appendTo($container);
        $table.addClass("display compact");


        var datatable = $table.DataTable({
            "ajax": "https://jsonblob.com/api/jsonBlob/"+json_id,
            "aaSortingFixed": [[1,'desc']],
            "lengthMenu": [ [10, 20, 30, 40, 50], [10, 20, 30, 40, 50] ],
            "pageLength": 10,
            "deferRender": true,
            "bDeferRender": true,
            "sScrollX": "100%",
            "bPaginate":true,
            "bRetrieve":true,
            "bScrollCollapse": true,
            "columns": [
                {
                    data: 'author_name',
                    title:'Auteur',
                },
                {
                    data: 'post_num',
                    title:'#',
                    render: function ( data, type, row ) {
                        var page_num = Math.floor(parseInt(data,10)/20)+1;
                        return '<a  title="Aller à #'+data+'..." target="_blank" href="'+DMO_url+'#'+data+'">'+data+'</a>';
                    }
                },


                {
                    data: 'title',
                    title: 'Contribution',
                    render: function ( data, type, row ) {
                        var output = '';
                        var addendum = '';
                        if (data==="Inconnu"){
                            data = '<b>Pas d\'information</b>';
                            addendum = 'onmouseover="forum.DMOFilter_hideThumbnail()"';
                            output = '<a  target="_blank" '+addendum+' href="'+row.url+'">'+data+'</a>';
                        }else{
                            addendum = 'onmouseleave="forum.DMOFilter_hideThumbnail()" onmouseover="forum.DMOFilter_showThumbnail(\''+row.thumbnail_url+'\')"';
                            output = '<span  class="link" '+addendum+' onclick="forum.DMOFilter_setYoutubeVideo(\''+row.url+'\')">'+data+'</span>';
                        }
                        return output;
                    }
                },
                {
                    data: 'timestamp',
                    title: 'Date',
                    render: function ( data, type, row ) {
                        var ts = parseInt(data,10);
                        var d = new Date(ts);
                        return '<span title="'+d.toLocaleString("fr-FR")+'">'+d.toLocaleDateString("fr-FR")+'</span>';
                    }
                }
            ],
            "language": language_setup,
            "autoWidth": false,
            "columnDefs": [
                { "width": "80%", targets:2 },
                {
                    targets: "_all",
                    orderable: false
                }

            ],
            fixedColumns: true
        });

    });


})();