Supreme7 / Supreme7 PH!IMDB

// ==UserScript==
// @name         Supreme7 PH!IMDB
// @namespace    https://prohardver.hu/tag/supreme7.html
// @version      0.5
// @description  TMDB (themoviedb.org) film/sorozat adatok lekérése a Prohardver! lapcsalád fórumán IMDB url alapján
// @author       Supreme7
// @match        https://prohardver.hu/tema/*
// @match        https://mobilarena.hu/tema/*
// @match        https://itcafe.hu/tema/*
// @match        https://gamepod.hu/tema/*

// @grant       GM_xmlhttpRequest

// @updateURL https://openuserjs.org/meta/Supreme7/Supreme7_PH!IMDB.meta.js
// @downloadURL https://openuserjs.org/install/Supreme7/Supreme7_PH!IMDB.user.js
// @copyright 2020, Supreme7 (https://openuserjs.org/users/Supreme7)
// @license MIT

// ==/UserScript==

(function() {
    'use strict';


    // Ha az új hozzászólás, válasz, vagy szerkesztés gombra kattint, elindul a szkript
    $(document).on("click", "[data-action-msg-new], [data-action-msg-reply], [data-action-msg-mod]", function(e) {


        // Megnézzük melyik szerkesztőt használja a felhasználó
        if($("[data-rtif-legacy='0']").length > 0){
            window.editor = 1; // Régi szerkesztő
        }else{
            window.editor = 0; // Új szerkesztő
        }


        e.preventDefault();

        // IMDB gomb a szerkesztőhöz adása
        $(".msg-editor").find(".msg-controls").prepend('<a id="s7-imdb-button" data-toggle="collapse" href="#s7-imdb" class="btn btn-success btn-sm text-white">IMDB</a>');

        // S7 PH!IMDB felület
        $(".msg-upload-collapse").before(`<br><div class="card collapse" id="s7-imdb" style="background: none;"><div class="card-header" style="padding: 2px;">SUPREME7 PH!MDB</div>
<div class="card-body"><input type="text" placeholder="IMDB url" style="text-align: center; padding: 5px; width: 100%; border: 1px dotted #888;" id="imdb-url"></div>
<div id="imdb-rating-box" style="display: none;"></div>
<textarea id="movie-data" style="display: none; width: 100%;" rows="4"></textarea>
<div class="text-center">
<div class="btn-group"><button class="btn btn-warning copy-movie-data" style="display: none;">Másolás</button></div>
<div class="btn-group"><button class="btn btn-success insert-movie-data" style="display: none;">Beillesztés</button></div></div>
</div>
`);

    });

    // Az IMDB gomb lenyomására scroll az input mezőhöz és fókusz
    $(document).on('click', '#s7-imdb-button', function(){

        $("input#imdb-url").focus();
        $("html, body").animate({
            scrollTop: $('#s7-imdb').offset().top
        }, 500);

    });

    // Ha változik az input mező tartalma
    $(document).on('change', 'input#imdb-url', function(){


        $("textarea#movie-data").text("");

        var value = $("input#imdb-url").val();
        if(value == ""){

            // wtf?

        }else{

            // IMDB azonosító kikukázása az URL-ből
            var imdbId = matchImdb(value);

            if(imdbId != false){

                // TMDB adatok keresése
                GM_xmlhttpRequest({
                    url: "https://api.themoviedb.org/3/find/"+imdbId+"?api_key=d90f096470d9bc1233cafec11b273eeb&language=hu&external_source=imdb_id",
                    method: 'GET',
                    onload: function(res) {


                        if (res.status === 200) {


                            var json = JSON.parse(res.responseText);


                            if(json["movie_results"].length > 0 || json["tv_results"].length > 0 ){

                                // IMDB rating plugn funkció
                                loadImdbRating(imdbId);


                                var dataTitle;
                                var dataOriginalTitle;
                                var dataReleaseYear;
                                var genres = "";


                                // Filmtalálat
                                if(json["movie_results"].length > 0){


                                    // Film adatok
                                    dataTitle = json["movie_results"][0]["title"];
                                    dataOriginalTitle = json["movie_results"][0]["original_title"];
                                    dataReleaseYear = json["movie_results"][0]["release_date"].substring(0,4);

                                    // Műfajok
                                    $.each(json["movie_results"][0]["genre_ids"], function(key, value){

                                        genres += "#"+ genresById(value) + " ";

                                    });


                                }else if(json["tv_results"].length > 0){

                                    // Sorozat adatok
                                    dataTitle = json["tv_results"][0]["name"];
                                    dataOriginalTitle = json["tv_results"][0]["original_name"];
                                    dataReleaseYear = json["tv_results"][0]["first_air_date"].substring(0,4);



                                    // Műfajok
                                    $.each(json["tv_results"][0]["genre_ids"], function(key, value){


                                        genres += "#"+ genresById(value) + " ";

                                    });

                                }


                                // A szerkesztőnek megfelelően formázott szöveget illesztjük a textarea-ba a kapott filmadatok alapján
                                if(editor === 0){
                                    // ÚJ SZERKESZTŐ
                                    $("textarea#movie-data").val('<p><a href="https://www.imdb.com/title/'+ imdbId +'/" target="_blank" rel="noopener"><b>' + dataTitle + '</b></a> (' + dataReleaseYear + ') - ' + dataOriginalTitle + '</p><p>'  + genres + '</p>').show();

                                }else if(editor === 1){
                                    // RÉGI SZERKESZTŐ
                                    $("textarea#movie-data").val("[L:https://www.imdb.com/title/"+ imdbId +"/][b]" + dataTitle + "[/b][/L] (" + dataReleaseYear + ") " + dataOriginalTitle + "\n" + genres + "").show();

                                }

                                // Másolás-beillesztés gombok megjelenítése
                                $(".copy-movie-data").show();
                                $(".insert-movie-data").show();

                                // Másolás gombra kattintva vágólapra másolja a kódot
                                $(document).on("click", ".copy-movie-data", function(){


                                    $("textarea#movie-data").select();
                                    document.execCommand('copy');

                                });

                                // Beillesztés gombra kattintva a használt szerkesztőnek megfelelő kódott illeszt a szerkesztő mezőbe
                                $(document).one("click", ".insert-movie-data", function(){


                                    var formattedCode =  $("textarea#movie-data").val();
                                    var content;

                                    if(editor === 0){
                                        // ÚJ SZERKESZTŐ

                                        content = $("div.rtif-content").html();

                                        $("div.rtif-content").html((content === "<p><br data-mce-bogus=\"1\"></p>" ? formattedCode : content + "<br>" + formattedCode));


                                    }else if(editor === 1){
                                        // RÉGI SZERKESZTŐ
                                        content = $("textarea.rtif-content").val();

                                        $("textarea.rtif-content").val((content == "" ? formattedCode : content + "\n" + formattedCode));
                                    }

                                    $("html, body").animate({
                                        scrollTop: $('.msg-editor').offset().top
                                    }, 500);

                                });

                            }else{

                                alert("Nem található film vagy sorozat a megadott azonosítóval!");

                            }

                        }else{

                            alert("Hiba történt az adatok lekérdezése során!");

                        }

                    }
                });

            }


        }

    });



    function genresById(id){

        // Műfajok azonosító alapján

        var genres = {"10768": "Háború-politika", "10767" : "Talkshow", "10766":"Szappanopera", "10765" : "Sci-Fi-Fantasy", "10764": "Valóságshow", "10763" : "Hírműsor", "10762" : "Gyerek", "10759" : "Akció-kaland", "28" : "Akció", "12" : "Kaland", "16" : "Animációs", "35" : "Vígjáték", "80" : "Bűnügyi", "99" : "Dokumentum", "18" : "Dráma", "10751" : "Családi", "14" : "Fantasy", "36" : "Történelmi", "27" : "Horror", "10402" : "Zenei", "9648" : "Rejtély", "10749" : "Romantikus", "878" : "Sci-fi", "10770" : "TV-film", "53" : "Thriller", "10752" : "Háborús", "37" : "Western"};

        return genres[id];
    }


    function matchImdb(string){


        if(string.match(/(https:\/\/|https:\/\/www\.|https:\/\/m\.|m\.)imdb\.com\/title\/tt([0-9]+)\//g)){


            //var url = new URL(string);
            //var split = url.pathname.split("/");

            var regexp = /\/tt([0-9]+)\//g;
            var match = regexp.exec(string);

            var imdbId = "tt" + match[1];

            return imdbId;

        }else{

            alert("Hibás URL formátum");

            return false;
        }


    }


    function loadImdbRating(imdbId){

        // IMDB rating plugin


        $("#imdb-rating-box").html('<span id="imdb-rating" class="imdbRatingPlugin text-success" data-user="" data-title="'+imdbId+'" data-style="p4" ></span>');


        $('[id^="imdb-jsonp"]').remove(); //to prevent creation of multiple script tags.


        (function(d,s,id){
            var js,stags=d.getElementsByTagName(s)[0];if(d.getElementById(id)){}js=d.createElement(s);js.id=id;js.src="https://ia.media-imdb.com/images/G/01/imdb/plugins/rating/js/rating.js";stags.parentNode.insertBefore(js,stags);
        })(document,'script','imdb-rating-api');

    }

    // Figyeli, hogy az IMDB értékelés betöltött-e, és ha igen, azt is beilleszti a formázott kódba
    $("body").on('DOMSubtreeModified', "#imdb-rating", function() {



        var imdbRatingText = $("#imdb-rating").find("span.rating").text();
        var currentVal = $("textarea#movie-data").val();

    if(imdbRatingText != ""){
        if(editor === 0){
            // ÚJ SZERKESZTŐ
            $("textarea#movie-data").val(currentVal + "<p><b>IMDB:</b> " + imdbRatingText + "</p>");
        }else if(editor === 1){
            // RÉGI SZERKESZTŐ
            $("textarea#movie-data").val(currentVal + "\n[b]IMDB:[/b] " + imdbRatingText + "");
        }
    }

    });


})();