BIhelper

Auto-DL

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name         BIhelper
// @version      1.2
// @grant        GM_download
// @grant        GM_addStyle
// @namespace    https://greasyfork.org/users/290665
// @description  Auto-DL
// @include      https://www.berlinintim.de/*
// ==/UserScript==

$(function() {
    addstyle();

    var NAME = $('title')
        .text()
        .replace(/ +$/,'');
    var PHONE = $('.telefon_button').last().attr('href');
    PHONE = PHONE
        .replace(/^javascript:.*/i,'')
        .replace(/^#/i,'')
        .replace(/tel:/,'')
        .replace(/\+49 */,'0')
        .replace(/ \/ /,'-')
        .replace(/ +/,'-');
    NAME = NAME.replace(/(Privatmodell|(Highclass-)?Escort|Gastmodell|Transsexuelle)\s*/ig,'');
    NAME = NAME.replace(/[^\w-\(\)äöüÄÖÜß ]/g,'');
    var name = NAME + (PHONE?' - ' + PHONE:'');
    var dlArea = $('<div id="BIhelper"></div>');
    $('<button title="download '+name+'"><span class="material-icons md-18">download</span></b></button>')
        .data('name',name)
        .on('click', function(event) {
            downloadAll($(event.currentTarget).data('name'));
        }).appendTo(dlArea);
    $('<button title="copy text"><span class="material-icons md-18">content_copy</span></b></button>')
        .on('click', function(event) {
            navigator.clipboard.writeText(adData());
            $("<div>OK</div>").appendTo($(this))
                .delay(2000).fadeOut(1000, function() {
                $(this).remove();
            });
        }).appendTo(dlArea);

    $(dlArea).find("button").addClass("head_btn");

    $(dlArea).find('button');
    $('.hl_date').first().append(dlArea);
});

function downloadAll(name) {
    let downloadlist = [];
    $('img.slider_img').each(function() {
        var link = $(this).attr('src');
        if (link.length) {
            downloadlist.push(link.replace(/\?.*/,''));
        }
    });
    let listUnique = [...new Set(downloadlist)];
    startDownload(name,listUnique);
}

function startDownload(path,downloadlist) {

    var dialog = $('<div id="BIhelperdialog" title="Download to '+path+' ..."></div>').appendTo($('#BIhelper'));

    for (let URL of downloadlist) {
        var name = URL.replace(/.*\//,'');
        var file = path.replace(/[^\w-\(\)äöüÄÖÜß ]/g,'')+'/'+name;
        URL = URL.replace(/^\/\//,'https://');
        var line = $('<div class="BIDL" data-name="'+name+'">'+name+'</div>').appendTo(dialog);
        (function(url,filepath,filename,linediv) {
            var dl = GM_download({
                url: url,
                name: filepath,
                saveAs: false,
                onerror: function(err){
                    console.error(err);
                    $(linediv).append('<span class="download_error">ERROR: '+err.error+' - '+err.details+'</span>')
                        .delay(2000).fadeOut(1000, function() {
                            $(this).remove();
                        });
                },
                onload: function() {
                    $(linediv).append('<span class="download_ok">✓</span>')
                        .delay(2000).fadeOut(1000, function() {
                            $(this).remove();
                        });
            },
            });
        })(URL,file,name,line);

    }
}
function adData() {
    let name = $('h1.ellipsis').text();

    let subheader = "";
    let text = "";
    $('.sedcard_facts_modell .blocktext_hl').each(function(undefined,el) {
        let key = $(el).text().trim();
        let val = $(el).nextUntil('.blocktext_hl').find("*").addBack().contents()
         .filter(function() {
          return (this.nodeType === 3) && ($(this).text().match(/\w/i));
        })
        .map(function() {
            return $(this).text().trim().replace(/\u00A0/,' ')
        }).get().join(", ");
        if (key && val) text += $(el).text().trim() + " [B]" + val + "[/B]\n";
    });
    $('div.block_teaser .blocktext_hl').each(function(undefined,el) {
        let key = $(el).text().trim();
        let val = $(el).nextUntil('.blocktext_hl').find("*").not(".sternchentext").addBack().contents()
         .filter(function() {
          return (this.nodeType === 3) && ($(this).text().match(/\w/i));
        })
        .map(function() {
            return $(this).text().trim().replace(/\u00A0/,' ')
        }).get().join(", ");
        if (key && val) text += $(el).text().trim() + " [B]" + val + "[/B]\n";
    });
    let stbr = [];
    $("h2:contains(Mein Steckbrief)").parent().parent().parent().find('.block_teaser div.row').each(function(undefined,el) {
        let key = $(el).children("div").eq(0).text().replace(/\u00A0/,' ').trim();
        let val = $(el).children("div").eq(1).text().replace(/\u00A0/,' ').trim();
        if (key && val) stbr.push(`${key}: [B]${val}[/B]`);
    });

    text += stbr.join(", ");

    let URL = window.location.href;
    let address = $('#adress_0 > div').first().contents().filter(function() {
        return (this.nodeType === 3) && ($(this).text().match(/\w/i));
    }).map(function() {
        return $(this).text().trim().replace(/\u00A0/,' ')
    }).get().join(", ");
    let gmap_address = encodeURIComponent(address);
    let adressdetail = $('#adressdetail0').text().trim();
    // let service = $('div.tablet-info-service').html()
    //     .replace(/\n/g,'')
    //     .replace(/<(\/)?h2>/g,'[$1B]')
    //     .replace(/\[B\]/g,'\n[B]')
    //     .replace(/\[\/B\]/g,':[/B]');
    // let languages = '';
    let dataHTML = "Infoservice\n"
        +`[QUOTE][URL=${URL}][SIZE="3"][B]${name}[/B][/SIZE]\n`
        +`${subheader}[/URL]`
        +`[SIZE="1"]\n${text}\n\n`
        // +`[B]Telefon:[/B] [SIZE="3"]${phone}[/SIZE], ${phone2}, ${phone3}\n`
        +`[B]Adresse:[/B] [URL=https://www.google.de/maps/place/${gmap_address}]${address}[/URL] ${adressdetail}`
        // +`${service}\n`
        +`[/SIZE][/QUOTE]`;
    dataHTML = dataHTML.replace(/ {2,}/g,' ').replace(/\n{3,}/,'\n\n');
    //console.log(dataHTML);
    return dataHTML;
}


function addstyle() {
    $('head').append('<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">');
    GM_addStyle(`
    #BIhelper {
        max-height: 150px;
        overflow: auto;
        font-size: 10px;
        position: absolute;
        right: 10px;
        top: 11px;
        z-index: 100;
    }

    #BIhelper button {
        padding: 5px 10px;
        background-color: #980403;
        color: #fff;
        border: none;
        margin-left: 8px;
        position: relative;
        overflow: visible;
    }

    .BIDL {
        background-color: black;
    }
    .download_error {
        color: white;
        background-color: #880010;
        padding: 1px 4px;
        border-radius: 2px;
        margin: 0px 4px;
    }

    .download_ok {
        color: white;
        background-color: #10a020;
        padding: 1px 4px;
        border-radius: 2px;
        margin: 0px 4px;
    }

    `);
}