Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » вопросы по javascript

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

Открыть новую тему     Написать ответ в эту тему

Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gserg2007
Делайте то, что нужно, до появления окна. Запоминаете элемент или выделение. То, с чем будете работать далее. Или давайте конкретный пример.

Всего записей: 16417 | Зарегистр. 20-09-2014 | Отправлено: 13:33 29-09-2022
gserg2007

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот простой пример модального окна (html-файл).
Выделите часть текста, запустите окно и щелкните на нём не закрывая.
Выделение пропадет, а надо, чтобы не пропадало.

Код:
 
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Модальное окно</title>
    <style>
        /* Затемнение всей страницы при открытии окна */
        .modal {
            display: none;
            position: fixed;
            z-index: 1;
            left: 0;
            top: 0;
            width: 100%;
            height: 100%;
            overflow: auto; /* разрешаем прокрутку */
            background-color: rgba(0,0,0,0.4);
            z-index: 100;
            opacity: 0.6;
        }
 
        /* Добавляется при открытии окна */
        .modal-open {
            display: block;
        }
 
        /* Содержимое модального окна */
        .modal-content {
            background-color: #fefefe;
            margin: 15% auto; /* отступ сверху и центрирование по горизонтали */
            padding: 20px;
            border: 1px solid #888;
            width: 80%;
        }
 
        /* Кнопка закрытия модального окна */
        .close {
            color: #aaa;
            float: right;
            font-size: 28px;
            font-weight: bold;
        }
 
        .close:hover,
        .close:focus {
            color: black;
            text-decoration: none;
            cursor: pointer;
        }
    </style>
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            // это то модальное окно, с которым и будем работать
            const modal = document.querySelector('#myModal');
 
            // назначаем обработчик события для клика по кнопке открытия окна
            document.querySelector('#myBtn').addEventListener('click', openModal);
 
            /*
             * Обработчик события клика по кнопке открытия модального окна
             */
            function openModal() {
                modal.classList.add('modal-open');
                // обработчики событий, которые работают, когда окно открыто
                attachModalEvents();
            }
 
            /*
             * Функция назначает обработчики событий к элементам модального окна при открытии
             */
            function attachModalEvents() {
                // закрывать модальное окно при нажатии на крестик
                modal.querySelector('.close').addEventListener('click', closeModal);
                // закрывать модальное окно при нажатии клавиши Escape
                document.addEventListener('keydown', handleEscape);
                // закрывать модальное окно при клике вне контента модального окна
                modal.addEventListener('click', handleOutside);
            }
 
            /*
             * Обработчик события клика по кнопке закрытия модального окна
             */
            function closeModal() {
                modal.classList.remove('modal-open');
                // окно закрыто, эти обработчики событий больше не нужны
                detachModalEvents();
            }
 
            /*
             * Функция удаляет обработчики событий к элементам модального окна при закрытии
             */
            function detachModalEvents() {
                modal.querySelector('.close').removeEventListener('click', closeModal);
                document.removeEventListener('keydown', handleEscape);
                modal.removeEventListener('click', handleOutside);
            }
 
            /*
             * Функция закрывает модальное окно при нажатии клавиши Escape
             */
            function handleEscape(event) {
                if (event.key === 'Escape') {
                    closeModal();
                }
            }
 
            /*
             * Функция закрывает модальное окно при клике вне контента модального окна
             */
            function handleOutside(event) {
                const isClickInside = !!event.target.closest('.modal-content');
                if (!isClickInside) {
                    closeModal();
                }
            }
        });
    </script>
</head>
<body>
    <!-- Кнопка открытия модального окна -->
    <button id="myBtn">Открыть окно</button>
 
    <!-- Затемнение всей страницы при открытии окна -->
    <div id="myModal" class="modal">
        <!-- Содержимое модального окна -->
        <div class="modal-content">
            <span class="close">&times;</span>
            <p>Контент модального окна</p>
        </div>
    </div>
    Выделите тут часть текста.
</body>
</html>
 

Всего записей: 3 | Зарегистр. 27-05-2014 | Отправлено: 17:38 29-09-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gserg2007
вам не нужно это визуально, достаточно лишь сохранить выделение перед открытием.. но можно и восстанавливать постоянно, если уж так хочется.
https://jsfiddle.net/uahv3xqg/
решение не кроссбраузерное, нужно добавить еще кода.. что то типа

Код:
function saveSelection() {
    if (window.getSelection) {
        var sel = window.getSelection();
        if (sel.getRangeAt && sel.rangeCount) {
            return sel.getRangeAt(0);
        }
    } else if (document.selection && document.selection.createRange) {
        return document.selection.createRange();
    }
    return null;
}
 
function restoreSelection(range) {
    if (range) {
        if (window.getSelection) {
            var sel = window.getSelection();
            sel.removeAllRanges();
            sel.addRange(range);
        } else if (document.selection && range.select) {
            range.select();
        }
    }
}

Всего записей: 16417 | Зарегистр. 20-09-2014 | Отправлено: 21:08 29-09-2022
RdMax

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите почему на ютубе скрипты работают, а на сайте с вставленным видео с ютуба нет ?
Вот например скрипт на жесте мыши включает перевод субтитров на ютубе:

Код:
setTimeout(function(){
document.querySelector('button[class*="subtitles-button"]').click();
},100);
setTimeout(function(){
document.querySelector('button[class*="settings-button"]').click();
},300);
setTimeout(function(){
  document.querySelector('span[class="ytp-menuitem-label-count"]').click();
},1000);
setTimeout(function(){
    document.querySelector('div.ytp-panel-menu >:last-child >div').click();
},2000);
setTimeout(function(){
    document.querySelector('div.ytp-panel-menu > div:nth-child(84) > div').click();
},3000);

На ютубе работает, а на dugtor с трейлерами с ютуба с такими же элементами по коду - нет

Всего записей: 271 | Зарегистр. 11-11-2020 | Отправлено: 15:36 08-10-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RdMax

Цитата:
а на сайте с вставленным видео с ютуба нет ?

потому что видео вставляется в iframe, с другого домена, к которому доступа у вас нет.
 
или говорите точно о чем речь.

Всего записей: 16417 | Зарегистр. 20-09-2014 | Отправлено: 19:15 08-10-2022 | Исправлено: Mavrikii, 21:36 08-10-2022
b7music



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Здравствуйте, подскажите, пожалуйста, почему может не срабатывать serialize() ?

Код:
$("#contacts_common_form").submit(function() {
        // alert('send');
        
        var th = $(this);
        th.find(".form-result").remove();
        
        $.ajax({
            type: "POST",
            url: "/ajax/feedback_form.php", //Change
            //data: th.serialize()
            data: th.serialize()
            
        }).done(function(data) {
             //alert(data);
                console.log(data == 'ok');
 
 
            if (data == 'ok') {
                // th.find(".form-group,.text-center").hide();
                th.prepend('<div class="form-result">Заявка принята!</div>');
                th.trigger("reset");
            }
            else{
                alert(data);
            }
        // setTimeout(function() {
            // Done Functions
            // th.trigger("reset");
        // }, 1000);
        });
        return false;
    });

data  возвращает false
Если указать data: th.serializeArray() то вот что выводит
http://prntscr.com/ASPNFAZnrvsI
 
 
и вроде как передаются данные в файл http://prntscr.com/tBXhen6V-EOg но не работает(

Всего записей: 684 | Зарегистр. 04-03-2010 | Отправлено: 08:35 27-10-2022 | Исправлено: b7music, 09:49 27-10-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
b7music

Цитата:
data  возвращает false

возвращает куда?
 

Цитата:
.done(function(data) {

это ответ сервера, а не данные из формы.

Всего записей: 16417 | Зарегистр. 20-09-2014 | Отправлено: 10:53 27-10-2022
b7music



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
возвращает куда?

 
в консоле.  console.log( data == 'ok');  
если в лог вывести th  

Код:
{
    "0": {
        "0": {
            "__ym_indexer": 2555,
            "value": "как зовут",
            "metrikaId_0.042850920168386875": 11
        },
        "1": {
            "__ym_indexer": 2563,
            "value": "почта",
            "metrikaId_0.042850920168386875": 13
        },
        "2": {
            "__ym_indexer": 2570,
            "metrikaId_0.042850920168386875": 14
        },
        "3": {
            "__ym_indexer": 2574,
            "value": "сообщение",
            "metrikaId_0.042850920168386875": 16
        },
        "4": {
            "__ym_indexer": 2583,
            "metrikaId_0.042850920168386875": 17
        },
        "5": {
            "__ym_indexer": 2585,
            "metrikaId_0.042850920168386875": 18
        },
        "6": {
            "__ym_indexer": 2587,
            "metrikaId_0.042850920168386875": 19
        },
        "jQuery321093904275933497221": {
            "events": {
                "submit": [
                    {
                        "type": "submit",
                        "origType": "submit",
                        "data": null,
                        "guid": 47,
                        "namespace": ""
                    }
                ]
            }
        },
        "__ym_indexer": 2540,
        "metrikaId_0.042850920168386875": 8
    },
    "length": 1
}

а вот после data: th.serialize() в data пусто

Всего записей: 684 | Зарегистр. 04-03-2010 | Отправлено: 11:02 27-10-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
b7music

Цитата:
а вот после data: th.serialize() в data пусто

да в каком месте вы data смотрите и как???

Всего записей: 16417 | Зарегистр. 20-09-2014 | Отправлено: 11:20 27-10-2022 | Исправлено: Mavrikii, 11:20 27-10-2022
b7music



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
        console.log(data);
        return false;
        
    });
в конце дописал
'это console.log(th);
http://prntscr.com/3eKl_5PR9fSg
Соответственно console.log( $(this).serialize() );
 
 возвращает то что нужно, но не работает(
вот содержимое файла  /ajax/feedback_form.php

Код:
$name = $_POST["name"];
$from = $_POST["email"];
$TEXT = "".$_POST["message"];
 
      $arEventFields= array(
        "AUTHOR" => $_POST["name"],
        "AUTHOR_EMAIL" => $_POST["email"],
 
        "TEXT" => $TEXT,
        );
      CEvent::Send("FEEDBACK_FORM", SITE_ID, $arEventFields);
 

Всего записей: 684 | Зарегистр. 04-03-2010 | Отправлено: 11:33 27-10-2022 | Исправлено: b7music, 11:58 27-10-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
b7music

Цитата:
возвращает то что нужно, но не работает(

раз данные уходят, значит дело не в этом. а в том, что делается на сервере.
переадресации 302 сервер не делает? иначе POST данные не перебрасываются.
 
var_dump($_POST); и смотрите что есть вообще

Всего записей: 16417 | Зарегистр. 20-09-2014 | Отправлено: 21:18 27-10-2022 | Исправлено: Mavrikii, 21:51 27-10-2022
Weinaum



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую, есть три переменные типа string.
Одна - пусть будет так: const rootUrl = window.location.origin;
Вторая - скажем relativePath как очевидно является стринговым представлением относительного url, берется из атрибута. Сложение этих двух стрингов сравнивается с третьей переменной -  
var currentUrl = window.location.href;
Проблема в том, что вторая переменная - relativePath - может быть записана несколькими вариантами - со слешами и/или в начале и/или в конце, и так и так, и совсем без них.  
Например -  
/category/product1/
/category/product2
category/product3/
/page.html/

 
и тд и тп.  
 
Последняя переменная currentUrl также может быть как со слешем в конце так и без слеша.  
 
Поэтому, перед конкатинацией и сравнением надо сначала удалить слеши у relativePath и у currentUrl, но только если слеш первый и/или последний символ в строке, чтобы не удалить промежуточные слеши, а потом уже например
 
rootUrl.concat('/', relativePath);  - и уже сравнивать с currentUrl
 
Проблема что я с регулярками не дружу почти, подскажите как правильную составить )
 
 
 

Всего записей: 2156 | Зарегистр. 18-06-2006 | Отправлено: 11:25 08-11-2022 | Исправлено: Weinaum, 11:28 08-11-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Weinaum
js регулярки в javascript регулярные выражения

Цитата:
но только если слеш первый и/или последний символ в строке

ну, например

Код:
String.prototype.rtrim = function(chr) {
    var rgx = new RegExp((!chr? '\\s' : '[' + chr + ']') + '+$');
    return this.replace(rgx, '');
}
String.prototype.ltrim = function(chr) {
    var rgx = new RegExp('^' + (!chr? '\\s' : '[' + chr + ']') + '+');
    return this.replace(rgx, '');
}

 
так как в chr нет экранирования, то делать уж самостоятельно.

Всего записей: 16417 | Зарегистр. 20-09-2014 | Отправлено: 12:20 08-11-2022
zagorisback



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как заблокировать выполнение Ajax, если <input> <form> и пустой?
 
required и включен, но Ajax продолжает то же самое
 

Код:
 
<form id="myForm2" class="navbar-form navbar-left" onsubmit="return false">
    
        <div>
            <b>Actor</b>
            <input type="text" id="nome" autofocus style="width: 300px;" placeholder="Inserisci attore in minuscolo o imdbid" name="input_nome" required />
            
            <input type="submit" class="button1" id="invia" name="Cerca un nome" value="Cerca Attore"  />
        
        </div>
        </form>
 
 

 
 

Код:
<div id="risultato">

 

Код:
 
<script type="text/javascript">
            $("#invia").click(function(){                
                $.ajax({    
                    type: "POST",  
                    url: "results_actor.php",  
                    data: "input_nome=" + $("#nome").val(),
                    success: function(response){
                        $("#risultato").html(response);
                    }
                });  
            });          
        </script>
 

Всего записей: 629 | Зарегистр. 05-05-2014 | Отправлено: 10:59 20-11-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zagorisback
Я же сказал - сделать проверку самостоятельно и если все как нужно, тогда $.ajax

Всего записей: 16417 | Зарегистр. 20-09-2014 | Отправлено: 11:26 20-11-2022
b7music



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Здравствуйте. Подскажите, как вставить свой блок div после этого

Код:
                       (insertedLoc = BX.create("DIV", {
                            attrs: { "data-property-id-row": locationId },
                            props: { className: "form-group bx-soa-location-input-container soa-property-container" },
                            style: { visibility: "hidden" },
                            html: currentLocation.HTML,
                        })),
 

 

Код:
var htmlText = <div class="form-group ">Текст текст</div>document.write(htmlText);

так не работает( скрипт перестает работать.
 
Вот полная функция  
 

Код:
getDeliveryLocationInput: function (node) {
                    var currentProperty, locationId, altId, location, k, altProperty, labelHtml, currentLocation, insertedLoc, labelTextHtml, label, input, altNode;
                    for (k in this.result.ORDER_PROP.properties)
                        if (this.result.ORDER_PROP.properties.hasOwnProperty(k) && "Y" == (currentProperty = this.result.ORDER_PROP.properties[k]).IS_LOCATION) {
                            (locationId = currentProperty.ID), (altId = parseInt(currentProperty.INPUT_FIELD_LOCATION));
                            break;
                        }
                    if ((location = this.locations[locationId]) && location[0] && location[0].output)
                        for (k in ((this.regionBlockNotEmpty = !0),
                        (labelHtml =
                            '<label class="bx-soa-custom-label" for="soa-property-' +
                            parseInt(locationId) +
                            '">' +
                            ("Y" == currentProperty.REQUIRED ? '<span class="bx-authform-starrequired">*</span> ' : "") +
                            BX.util.htmlspecialchars(currentProperty.NAME) +
                            (currentProperty.DESCRIPTION.length ? " <small>(" + BX.util.htmlspecialchars(currentProperty.DESCRIPTION) + ")</small>" : "") +
                            "</label>"),
                        (currentLocation = location[0].output),
                        (insertedLoc = BX.create("DIV", {
                            attrs: { "data-property-id-row": locationId },
                            props: { className: "form-group bx-soa-location-input-container soa-property-container" },
                            style: { visibility: "hidden" },
                            html: currentLocation.HTML,
                        })),
                        
                        node.appendChild(insertedLoc),
                        node.appendChild(BX.create("INPUT", { props: { type: "hidden", name: "RECENT_DELIVERY_VALUE", value: location[0].lastValue } })),
                        currentLocation.SCRIPT))
                            currentLocation.SCRIPT.hasOwnProperty(k) && BX.evalGlobal(currentLocation.SCRIPT[k].JS);
    
                    
                    if (location && location[0] && location[0].showAlt && altId > 0)
                        for (k in this.result.ORDER_PROP.properties)
                            if (parseInt(this.result.ORDER_PROP.properties[k].ID) == altId) {
                                altProperty = this.result.ORDER_PROP.properties[k];
                                break;
                            }
                    altProperty &&
                        ((altNode = BX.create("DIV", { attrs: { "data-property-id-row": altProperty.ID }, props: { className: "form-group bx-soa-location-input-container" } })),
                        (labelTextHtml = BX.util.htmlspecialchars(altProperty.NAME)),
                        (labelTextHtml += "Y" == altProperty.REQUIRED ? '<span class="bx-authform-starrequired">*</span> ' : ""),
                        (label = BX.create("LABEL", { attrs: { for: "altProperty" }, props: { className: "bx-soa-custom-label" }, html: labelTextHtml })),
                        (input = BX.create("INPUT", {
                            props: {
                                id: "altProperty",
                                type: "text",
                                placeholder: altProperty.DESCRIPTION,
                                autocomplete: "city",
                                className: "form-control bx-soa-customer-input bx-ios-fix",
                                name: "ORDER_PROP_" + altProperty.ID,
                                value: altProperty.VALUE,
                            },
                        })),
                        altNode.appendChild(label),
                        altNode.appendChild(input),
                        node.appendChild(altNode),
                        this.bindValidation(altProperty.ID, altNode)),
                        location && location[0] && node.appendChild(BX.create("DIV", { props: { className: "bx-soa-reference" }, html: this.params.MESS_REGION_REFERENCE }));
                },
 

Нужно после этого блока создать обычный со своим текстом.

Всего записей: 684 | Зарегистр. 04-03-2010 | Отправлено: 15:05 06-12-2022 | Исправлено: b7music, 15:06 06-12-2022
Weinaum



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
 
что то теперь задержка на всех слайдах и на каждом новом цикле помечаются 2 слайда - 1 и 2.
Может я что то недопонял?
https://codepen.io/lagudal/pen/RwJEEdj
 

Всего записей: 2156 | Зарегистр. 18-06-2006 | Отправлено: 15:41 06-12-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Weinaum

Цитата:
что то теперь задержка на всех слайдах  

ну так смена класса идет после окончания анимации.
можно менять и до начала движения, но тоже будет не очень.  

Цитата:
и на каждом новом цикле помечаются 2 слайда

потому что скрипт клонирует цепочку, вместе с классом.
можно так

Код:
.on('beforeChange', function(e, slick, slide) {
  $('.customer-logos .slide').removeClass('remove-filter');      
    })

 
Добавлено:
b7music

Цитата:
так не работает( скрипт перестает работать.

конечно не будет.
 

Цитата:
Подскажите, как вставить свой блок div после этого

после node.appendChild(insertedLoc),
сделать

Код:
node.appendChild(BX.create("DIV", {
  props: { className: "form-group" },
  html: "Текст текст"
  })),

Всего записей: 16417 | Зарегистр. 20-09-2014 | Отправлено: 20:49 06-12-2022 | Исправлено: Mavrikii, 20:53 06-12-2022
Weinaum



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
спасибо, смысл понятен

Всего записей: 2156 | Зарегистр. 18-06-2006 | Отправлено: 09:39 07-12-2022
Alinalessio

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Верстаю сайт на локалке. Подключил colorbox отсюда https://www.jacklmoore.com/colorbox/
Теперь на сайте прямо на локалке показываются блоки с чужой рекламой.
Я выяснил, что это провайдер ростелеком этим занимается, подсовывает рекламу если сайт незащищён ssl  
Но что мне делать на локалке?
Вопрос 1: Можно ли подключить colorbox чтобы ростелеком не лез со своей рекламой?
Вопрос 2: Если нельзя, то как сделать https на локалке?
 
Вот, это разве не безобразие?

 
Добавлено:
И ещё, по поводу colorbox. Кто сталкивался с тем, что на мобильных устройствах, всплывающее окошко по ширине больше сайта? Как это поправить?
На снимке красным выделил ширину сайта. Видно, что всплывающее окно намного больше ширины сайта.  

 
Может в js что-то надо прописать про ширину? Не подскажете? Или это дело в вёрстке html?
 
Ссылка на сайт: https://web72.ru/alinex/
 
Это те всплывающие окна, которые на мобильных устройствах шире, чем сайт:

Всего записей: 223 | Зарегистр. 21-06-2010 | Отправлено: 11:51 11-12-2022 | Исправлено: Alinalessio, 12:24 11-12-2022
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

Компьютерный форум Ru.Board » Интернет » Web-программирование » вопросы по javascript


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru