/** * jQuery fontIconPicker - v2.3 * * An icon picker built on top of font icons and jQuery * * http://codeb.it/fontIconPicker * * Made by Alessandro Benoit & Swashata * Under MIT License * * {@link https://github.com/micc83/fontIconPicker} * * Modified by Visual Composer Dev Team */ (function ( $ ) { 'use strict'; // Create the defaults once var defaults = { theme: 'fip-vc-theme-grey', // The CSS theme to use with this fontIconPicker. You can set different themes on multiple elements on the same page source: false, // Icons source (array|false|object) emptyIcon: true, // Empty icon should be shown? emptyIconValue: '', // The value of the empty icon, change if you select has something else, say "none" iconsPerPage: 20, // Number of icons per page hasSearch: true, // Is search enabled? searchSource: false, // Give a manual search values. If using attributes then for proper search feature we also need to pass icon names under the same order of source useAttribute: false, // Whether to use attribute selector for printing icons attributeName: 'data-icon', // HTML Attribute name convertToHex: true, // Whether or not to convert to hexadecimal for attribute value. If true then please pass decimal integer value to the source (or as value="" attribute of the select field) allCategoryText: 'From all categories', // The text for the select all category option unCategorizedText: 'Uncategorized', // The text for the select uncategorized option iconDownClass: 'fip-icon-down-dir', // Class for icon down iconUpClass: 'fip-icon-up-dir', // Class for icon up iconLeftClass: 'fip-icon-left-dir', // Class for icon left iconRightClass: 'fip-icon-right-dir', // Class for icon right iconSearchClass: 'fip-icon-search', // Class for search iconCancelClass: 'fip-icon-cancel', // Class for search canceling iconSpinClass: 'fip-icon-spin3', // Class for fip-icon-spin3 iconBlockClass: 'fip-icon-block', // Class for block(none icon) searchPlaceholder: 'Search Icon', // Search icon text placeholder mainClass: 'vc-icons-selector' }; // The actual plugin constructor function Plugin( element, options ) { this.element = $( element ); this.settings = $.extend( {}, defaults, options ); if ( this.settings.emptyIcon ) { this.settings.iconsPerPage --; } this.iconPicker = $( '
', { 'class': this.settings.mainClass, style: 'position: relative', html: '
' + '' + '' + '' + '' + '' + '' + '
' + '' } ); this.iconContainer = this.iconPicker.find( '.fip-icons-container' ); this.searchIcon = this.iconPicker.find( '.selector-search i' ); this.iconsSearched = []; this.isSearch = false; this.totalPage = 1; this.currentPage = 1; this.currentIcon = false; this.initialized = false; this.iconsPaged = false; this.iconsCount = 0; this.open = false; // Set the default values for the search related variables this.searchValues = []; this.availableCategoriesSearch = []; // The trigger event for change this.triggerEvent = null; // Backups this.backupSource = []; this.backupSearch = []; // Set the default values of the category related variables this.isCategorized = false; // Automatically detects if the icon listing is categorized this.selectCategory = this.iconPicker.find( '.icon-category-select' ); // The category SELECT input field this.selectedCategory = false; // false means all categories are selected this.availableCategories = []; // Available categories, it is a two dimensional array which holds categorized icons this.unCategorizedKey = null; // Key of the uncategorized category // Initialize plugin this.quickInit(); } Plugin.prototype = { /** * Quick init */ quickInit: function () { var first = true; // Add the theme CSS to the iconPicker this.iconPicker.addClass( this.settings.theme ); // To properly calculate iconPicker height and width // We will first append it to body (with left: -9999px so that it is not visible) this.iconPicker.css( { left: - 9999 } ).appendTo( 'body' ); var iconPickerHeight = this.iconPicker.outerHeight(), iconPickerWidth = this.iconPicker.outerWidth(); // Now reset the iconPicker CSS this.iconPicker.css( { left: '' } ); // Add the icon picker after the select this.element.before( this.iconPicker ); // Hide source element // Instead of doing a display:none, we would rather // make the element invisible // and adjust the margin this.element.css( { visibility: 'hidden', top: 0, position: 'relative', zIndex: '-1', left: '-' + iconPickerWidth + 'px', display: 'none', height: iconPickerHeight + 'px', width: iconPickerWidth + 'px', // Reset all margin, border and padding padding: '0', margin: '0 -' + iconPickerWidth + 'px 0 0', // Left margin adjustment to account for dangling space border: '0 none', verticalAlign: 'top' } ).hide(); // Set the trigger event if ( ! this.element.is( 'select' ) ) { // Determine the event that is fired when user change the field value // Most modern browsers supports input event except IE 7, 8. // IE 9 supports input event but the event is still not fired if I press the backspace key. // Get IE version // https://gist.github.com/padolsey/527683/#comment-7595 var ieVersion = (function () { var v = 3, div = document.createElement( 'div' ), a = div.all || []; while ( div.innerHTML = '', a[ 0 ] ) { ; } return v > 4 ? v : ! v; }()); var el = document.createElement( 'div' ); this.triggerEvent = (ieVersion === 9 || ! ('oninput' in el)) ? [ 'keyup' ] : [ 'input', 'keyup' ]; // Let's keep the keyup event for scripts that listens to it } this.setSelectedIcon( this.element.val() ); /** * Category changer */ this.selectCategory.on( 'change keyup', $.proxy( function ( e ) { // Don't do anything if not categorized if ( this.isCategorized === false ) { return false; } var targetSelect = $( e.currentTarget ), currentCategory = targetSelect.val(); // Check if all categories are selected if ( targetSelect.val() === 'all' ) { // Restore from the backups // @note These backups must be rebuild on source change, otherwise it will lead to error this.settings.source = this.backupSource; this.searchValues = this.backupSearch; // No? So there is a specified category } else { var key = parseInt( currentCategory, 10 ); if ( this.availableCategories[ key ] ) { this.settings.source = this.availableCategories[ key ]; this.searchValues = this.availableCategoriesSearch[ key ]; } } this.resetSearch(); this.loadIcons(); }, this ) ); /** * On down arrow click */ this.iconPicker.find( '.selector-button' ).on( 'click', $.proxy( function () { if ( ! this.open && first ) { first = false; this.initCategories(); } // Open/Close the icon picker this.toggleIconSelector(); }, this ) ); /** * Next page */ this.iconPicker.find( '.selector-arrow-right' ).on( 'click', $.proxy( function ( e ) { if ( this.currentPage < this.totalPage ) { this.iconPicker.find( '.selector-arrow-left' ).show(); this.currentPage = this.currentPage + 1; this.renderIconContainer(); this.renderIcons(); } if ( this.currentPage === this.totalPage ) { $( e.currentTarget ).hide(); } }, this ) ); /** * Prev page */ this.iconPicker.find( '.selector-arrow-left' ).on( 'click', $.proxy( function ( e ) { if ( this.currentPage > 1 ) { this.iconPicker.find( '.selector-arrow-right' ).show(); this.currentPage = this.currentPage - 1; this.renderIconContainer(); this.renderIcons(); } if ( this.currentPage === 1 ) { $( e.currentTarget ).hide(); } }, this ) ); /** * Realtime Icon Search */ this.iconPicker.find( '.icons-search-input' ).on( 'keyup', $.proxy( function ( e ) { // Get the search string var searchString = $( e.currentTarget ).val(); // If the string is not empty if ( searchString === '' ) { this.resetSearch(); return; } // Set icon search to X to reset search this.searchIcon.removeClass( this.settings.iconSearchClass ); this.searchIcon.addClass( this.settings.iconCancelClass ); // Set this as a search this.isSearch = true; // Reset current page this.currentPage = 1; // Actual search // This has been modified to search the searchValues instead // Then return the value from the source if match is found this.iconsSearched = []; $.grep( this.searchValues, $.proxy( function ( n, i ) { if ( n.toLowerCase().search( searchString.toLowerCase() ) >= 0 ) { this.iconsSearched[ this.iconsSearched.length ] = this.settings.source[ i ]; return true; } }, this ) ); // Filter duplicates this.iconsSearched = this.iconsSearched.filter( this.getOnlyUnique ); // Render icon list this.renderIconContainer(); this.renderIcons(); }, this ) ); /** * Quit search */ this.iconPicker.find( '.selector-search i' ).on( 'click', $.proxy( function () { this.iconPicker.find( '.icons-search-input' ).focus(); this.resetSearch(); }, this ) ); /** * On icon selected */ this.iconContainer.on( 'click', '.fip-box', $.proxy( function ( e ) { this.setSelectedIcon( $( e.currentTarget ).find( 'i' ).attr( 'data-fip-value' ) ); this.toggleIconSelector(); }, this ) ); /** * Stop click propagation on iconpicker */ this.iconPicker.on( 'click', function ( event ) { event.stopPropagation(); return false; } ); /** * On click out */ $( 'html' ).on( 'click', $.proxy( function () { if ( this.open ) { this.toggleIconSelector(); } }, this ) ); }, /** * Init */ init: function () { // Add the theme CSS to the iconPicker this.iconPicker.addClass( this.settings.theme ); // To properly calculate iconPicker height and width // We will first append it to body (with left: -9999px so that it is not visible) this.iconPicker.css( { left: - 9999 } ).appendTo( 'body' ); var iconPickerHeight = this.iconPicker.outerHeight(), iconPickerWidth = this.iconPicker.outerWidth(); // Now reset the iconPicker CSS this.iconPicker.css( { left: '' } ); // Add the icon picker after the select this.element.before( this.iconPicker ); // Hide source element // Instead of doing a display:none, we would rather // make the element invisible // and adjust the margin this.element.css( { visibility: 'hidden', top: 0, position: 'relative', zIndex: '-1', left: '-' + iconPickerWidth + 'px', display: 'none', height: iconPickerHeight + 'px', width: iconPickerWidth + 'px', // Reset all margin, border and padding padding: '0', margin: '0 -' + iconPickerWidth + 'px 0 0', // Left margin adjustment to account for dangling space border: '0 none', verticalAlign: 'top' } ).hide(); // Set the trigger event if ( ! this.element.is( 'select' ) ) { // Determine the event that is fired when user change the field value // Most modern browsers supports input event except IE 7, 8. // IE 9 supports input event but the event is still not fired if I press the backspace key. // Get IE version // https://gist.github.com/padolsey/527683/#comment-7595 var ieVersion = (function () { var v = 3, div = document.createElement( 'div' ), a = div.all || []; while ( div.innerHTML = '', a[ 0 ] ) { ; } return v > 4 ? v : ! v; }()); var el = document.createElement( 'div' ); this.triggerEvent = (ieVersion === 9 || ! ('oninput' in el)) ? [ 'keyup' ] : [ 'input', 'keyup' ]; // Let's keep the keyup event for scripts that listens to it } this.initCategories(); /** * Category changer */ this.selectCategory.on( 'change keyup', $.proxy( function ( e ) { // Don't do anything if not categorized if ( this.isCategorized === false ) { return false; } var targetSelect = $( e.currentTarget ), currentCategory = targetSelect.val(); // Check if all categories are selected if ( targetSelect.val() === 'all' ) { // Restore from the backups // @note These backups must be rebuild on source change, otherwise it will lead to error this.settings.source = this.backupSource; this.searchValues = this.backupSearch; // No? So there is a specified category } else { var key = parseInt( currentCategory, 10 ); if ( this.availableCategories[ key ] ) { this.settings.source = this.availableCategories[ key ]; this.searchValues = this.availableCategoriesSearch[ key ]; } } this.resetSearch(); this.loadIcons(); }, this ) ); /** * On down arrow click */ this.iconPicker.find( '.selector-button' ).on( 'click', $.proxy( function () { // Open/Close the icon picker this.toggleIconSelector(); }, this ) ); /** * Next page */ this.iconPicker.find( '.selector-arrow-right' ).on( 'click', $.proxy( function ( e ) { if ( this.currentPage < this.totalPage ) { this.iconPicker.find( '.selector-arrow-left' ).show(); this.currentPage = this.currentPage + 1; this.renderIconContainer(); this.renderIcons(); } if ( this.currentPage === this.totalPage ) { $( e.currentTarget ).hide(); } }, this ) ); /** * Prev page */ this.iconPicker.find( '.selector-arrow-left' ).on( 'click', $.proxy( function ( e ) { if ( this.currentPage > 1 ) { this.iconPicker.find( '.selector-arrow-right' ).show(); this.currentPage = this.currentPage - 1; this.renderIconContainer(); this.renderIcons(); } if ( this.currentPage === 1 ) { $( e.currentTarget ).hide(); } }, this ) ); /** * Realtime Icon Search */ this.iconPicker.find( '.icons-search-input' ).on( 'keyup', $.proxy( function ( e ) { // Get the search string var searchString = $( e.currentTarget ).val(); // If the string is not empty if ( searchString === '' ) { this.resetSearch(); return; } // Set icon search to X to reset search this.searchIcon.removeClass( this.settings.iconSearchClass ); this.searchIcon.addClass( this.settings.iconCancelClass ); // Set this as a search this.isSearch = true; // Reset current page this.currentPage = 1; // Actual search // This has been modified to search the searchValues instead // Then return the value from the source if match is found this.iconsSearched = []; $.grep( this.searchValues, $.proxy( function ( n, i ) { if ( n.toLowerCase().search( searchString.toLowerCase() ) >= 0 ) { this.iconsSearched[ this.iconsSearched.length ] = this.settings.source[ i ]; return true; } }, this ) ); // Filter duplicates this.iconsSearched = this.iconsSearched.filter( this.getOnlyUnique ); // Render icon list this.renderIconContainer(); this.renderIcons(); }, this ) ); /** * Quit search */ this.iconPicker.find( '.selector-search i' ).on( 'click', $.proxy( function () { this.iconPicker.find( '.icons-search-input' ).focus(); this.resetSearch(); }, this ) ); /** * On icon selected */ this.iconContainer.on( 'click', '.fip-box', $.proxy( function ( e ) { this.setSelectedIcon( $( e.currentTarget ).find( 'i' ).attr( 'data-fip-value' ) ); this.toggleIconSelector(); }, this ) ); /** * Stop click propagation on iconpicker */ this.iconPicker.on( 'click', function ( event ) { event.stopPropagation(); return false; } ); /** * On click out */ $( 'html' ).on( 'click', $.proxy( function () { if ( this.open ) { this.toggleIconSelector(); } }, this ) ); }, initCategories: function () { // If current element is SELECT populate settings.source if ( ! this.settings.source && this.element.is( 'select' ) ) { // Reset the source and searchSource // These will be populated according to the available options this.settings.source = []; this.settings.searchSource = []; // Check if optgroup is present within the select // If it is present then the source has to be grouped if ( this.element.find( 'optgroup' ).length ) { // Set the categorized to true this.isCategorized = true; this.element.find( 'optgroup' ).each( $.proxy( function ( i, el ) { // Get the key of the new category array var thisCategoryKey = this.availableCategories.length, // Create the new option for the selectCategory SELECT field categoryOption = $( '' ).prependTo( this.selectCategory ); // Show it and set default value to all categories this.selectCategory.show().val( 'all' ).trigger( 'change' ); }, /** * Load icons */ loadIcons: function () { // Set the content of the popup as loading this.iconContainer.html( '' ); // If source is set if ( this.settings.source instanceof Array ) { // Render icons this.renderIconContainer(); this.renderIcons(); this.setContainerSelectedItems(); } }, /** * Render icons inside the popup */ renderIconContainer: function () { var offset, iconsPaged = []; // Set a temporary array for icons if ( this.isSearch ) { iconsPaged = this.iconsSearched; } else { iconsPaged = this.settings.source; } // Remove duplicates iconsPaged = [ ...new Set( iconsPaged ) ]; // Count elements this.iconsCount = iconsPaged.length; // Calculate total page number this.totalPage = Math.ceil( this.iconsCount / this.settings.iconsPerPage ); // Hide footer if no pagination is needed if ( this.totalPage > 1 ) { this.iconPicker.find( '.selector-footer' ).show(); } else { this.iconPicker.find( '.selector-footer' ).hide(); } // Set the text for page number index and total icons this.iconPicker.find( '.selector-pages' ).html( this.currentPage + '/' + this.totalPage + ' (' + this.iconsCount + ')' ); // Set the offset for slice offset = (this.currentPage - 1) * this.settings.iconsPerPage; // Should empty icon be shown? if ( this.settings.emptyIcon ) { // Reset icon container HTML and prepend empty icon this.iconContainer.html( '' ); // If not show an error when no icons are found } else if ( iconsPaged.length < 1 ) { this.iconContainer.html( '' ); return; // else empty the container } else { this.iconContainer.html( '' ); } // Set an array of current page icons iconsPaged = iconsPaged.slice( offset, offset + this.settings.iconsPerPage ); this.iconsPaged = iconsPaged; // List icons /*for (var i = 0, item; item = iconsPaged[i++];) { // Set the icon title var flipBoxTitle = item; $.grep(this.settings.source, $.proxy(function (e, i) { if (e === item) { flipBoxTitle = this.searchValues[i]; return true; } return false; }, this)); // Set the icon box $('', { html: '', 'class': 'fip-box', title: flipBoxTitle }).appendTo(this.iconContainer); }*/ }, setContainerSelectedItems: function () { // If no empty icon is allowed and no current value is set or current value is not inside the icon set if ( ! this.settings.emptyIcon && (! this.element.val() || $.inArray( this.element.val(), this.settings.source ) === - 1) ) { // Get the first icon this.setSelectedIcon( this.iconsPaged[ 0 ] ); } else if ( $.inArray( this.element.val(), this.settings.source ) === - 1 ) { // Set empty this.setSelectedIcon(); } else { // Set the default selected icon even if not set this.setSelectedIcon( this.element.val() ); } }, /** * Set Highlighted icon */ setHighlightedIcon: function () { this.iconContainer.find( '.current-icon' ).removeClass( 'current-icon' ); if ( this.currentIcon ) { this.iconContainer.find( '[data-fip-value="' + this.currentIcon + '"]' ).parent( 'span' ).addClass( 'current-icon' ); } }, /** * Set selected icon * * @param {string} theIcon */ setSelectedIcon: function ( theIcon ) { if ( theIcon === this.settings.iconBlockClass ) { theIcon = ''; } // Check if attribute is to be used if ( this.settings.useAttribute ) { if ( theIcon ) { this.iconPicker.find( '.selected-icon' ).html( '' ); } else { this.iconPicker.find( '.selected-icon' ).html( '' ); } // Use class } else { this.iconPicker.find( '.selected-icon' ).html( '' ); } // Set the value of the element and trigger change event this.element.val( (theIcon === '' ? this.settings.emptyIconValue : theIcon ) ).trigger( 'change' ); if ( this.triggerEvent !== null ) { // Trigger other events for ( var eventKey in this.triggerEvent ) { this.element.trigger( this.triggerEvent[ eventKey ] ); } } this.currentIcon = theIcon; this.setHighlightedIcon(); }, /** * Open/close popup (toggle) */ toggleIconSelector: function () { this.open = (! this.open) ? 1 : 0; this.iconPicker.find( '.selector-popup' ).slideToggle( 300 ); this.iconPicker.find( '.selector-button i' ).toggleClass( this.settings.iconDownClass ); this.iconPicker.find( '.selector-button i' ).toggleClass( this.settings.iconUpClass ); if ( this.open ) { this.iconPicker.find( '.icons-search-input' ).focus().select(); if ( ! this.initialized ) { this.renderIconContainer(); this.renderIcons(); this.initialized = true; } } }, renderIcons: function () { for ( var i = 0; i < this.iconsPaged.length; i ++ ) { var item = this.iconsPaged[ i ]; // Set the icon title var flipBoxTitle = item; $.grep( this.settings.source, $.proxy( function ( e, i ) { if ( e === item ) { flipBoxTitle = this.searchValues[ i ]; return true; } return false; }, this ) ); // Set the icon box $( '', { html: '', 'class': 'fip-box', title: flipBoxTitle } ).appendTo( this.iconContainer ); } this.setContainerSelectedItems(); }, /** * Reset search */ resetSearch: function () { // Empty input this.iconPicker.find( '.icons-search-input' ).val( '' ); // Reset search icon class this.searchIcon.removeClass( this.settings.iconCancelClass ); this.searchIcon.addClass( this.settings.iconSearchClass ); // Go back to page 1 and remove back arrow this.iconPicker.find( '.selector-arrow-left' ).hide(); this.currentPage = 1; this.isSearch = false; // Rerender icons this.renderIconContainer(); this.renderIcons(); // Restore pagination if needed if ( this.totalPage > 1 ) { this.iconPicker.find( '.selector-arrow-right' ).show(); } } }; // Lightweight plugin wrapper $.fn.vcFontIconPicker = function ( options ) { // Instantiate the plugin this.each( function () { if ( ! $.data( this, "vcFontIconPicker" ) ) { $.data( this, "vcFontIconPicker", new Plugin( this, options ) ); } } ); // setIcons method this.setIcons = $.proxy( function ( newIcons, iconSearch ) { if ( undefined === newIcons ) { newIcons = false; } if ( undefined === iconSearch ) { iconSearch = false; } this.each( function () { $.data( this, "vcFontIconPicker" ).settings.source = newIcons; $.data( this, "vcFontIconPicker" ).settings.searchSource = iconSearch; $.data( this, "vcFontIconPicker" ).initSourceIndex(); $.data( this, "vcFontIconPicker" ).resetSearch(); $.data( this, "vcFontIconPicker" ).loadIcons(); } ); }, this ); // destroy method this.destroyPicker = $.proxy( function () { this.each( function () { if ( ! $.data( this, "vcFontIconPicker" ) ) { return; } // Remove the iconPicker $.data( this, "vcFontIconPicker" ).iconPicker.remove(); // Reset the CSS $.data( this, "vcFontIconPicker" ).element.css( { visibility: '', top: '', position: '', zIndex: '', left: '', display: 'block', height: '', width: '', padding: '', margin: '', border: '', verticalAlign: '' } ).show(); // destroy data $.removeData( this, "vcFontIconPicker" ); } ); }, this ); // reInit method this.refreshPicker = $.proxy( function ( newOptions ) { if ( ! newOptions ) { newOptions = options; } // First destroy this.destroyPicker(); // Now reset this.each( function () { if ( ! $.data( this, "vcFontIconPicker" ) ) { $.data( this, "vcFontIconPicker", new Plugin( this, newOptions ) ); } } ); }, this ); return this; }; })( jQuery );# Changelog ## [Unreleased] ## [1.0.4] - 2024-05-02 ### Fixed - Fix implicit nullable deprecation warning for PHP 8.4 ## [1.0.3] - 2022-01-10 ### Changed - Update PHPstan to 1.0 - Switched to GitHub Actions ## [1.0.2] - 2020-07-15 ### Added - Minor performance improvements ## [1.0.1] - 2020-06-16 ### Fixed - When calling `Punycode::decode()`, the case flags array would fail to populate when given an empty array. ## [1.0.0] - 2020-06-09 - Initial release

Как да разпознаем и избегнем опасните уебсайтове с незаконно съдържание

Разследване на сайтове с детска порнография: Как да разпознаете и сигнализирате незабавно
Child Porno site

Знаете ли, че въпреки често срещаните погрешни схващания, детските порнографски сайтове не предлагат никакви законни или безопасни „ползи“ – те са строго незаконни и морално отвратителни платформи, които експлоатират деца. Такива сайтове работят чрез скрити мрежи и криптирани връзки, за да разпространяват вредно съдържание, което унищожава животи. Използването им по какъвто и да е начин е престъпление, а единственото правилно действие е незабавното им избягване и докладване на властите. Ако се натъкнете на такъв материал, затворете страницата и се свържете с полицията или специализирана гореща линия за защита на децата.

Как да разпознаем и избегнем опасните уебсайтове с незаконно съдържание

Разпознаването на опасни сайтове започва с проверка на URL адреса – често те използват странни домейни или комбинации от букви и цифри, които имитират познати платформи. Ако попаднете на страница с тъмни банери, изскачащи прозорци или искания за изтегляне на съмнителен софтуер, това е сигнал за опасност. Избягването на незаконно съдържание изисква да не кликвате върху линкове от непознати хора в коментари, имейли или съобщения, които твърдят, че предлагат „ексклузивни” видеа. Подобни сайтове често са пълни с вируси и проследяващи скриптове, а самото им посещение е престъпление. Най-сигурното действие е незабавно да напуснете страницата и да докладвате за нея на органите, без да правите скрийншотове. Дори случайно отваряне изисква бързо изтриване на историята, за да се защитите от правни последствия. Практическата профилактика срещу такива сайтове включва блокери на нежелано съдържание и активен родителски контрол, който филтрира подозрителни ключови думи още при търсенето.

Сигнали за подозрителни платформи и измамни домейни

При разпознаване на опасни уебсайтове с незаконно съдържание, фалшивите домейни често имитират легитимни платформи чрез леки правописни грешки или различни домейн зони (.org вместо .com). Подавайте **сигнали за подозрителни платформи и измамни домейни** директно към акредитирани горещи линии и до доставчика на хостинг услуги, като включите URL, timestamp и скрийншот. Не кликвайте върху линкове от съмнителни имейли или форуми, защото те водят към фишинг огледала. Проверявайте SSL сертификата, но помнете, че наличието му не гарантира легалност. Измамните домейни често изискват необичайни плащания с криптовалута или изтегляне на допълнителен софтуер.
Сигнали за подозрителни платформи и измамни домейни трябва да съдържат и информация за времето на засичане, за да се улесни бързото блокиране.
Q: Как разпознавам измамен домейн, който предлага незаконно съдържание? A: Проверете WHOIS данните за анонимна регистрация, сравнете точния правопис с официалния сайт и избягвайте домейни с множество пренасочвания – те са типичен белег за подозрителна платформа.

Защо тези сайтове са риск за вашата сигурност и законност

Посещаването на сайтове с незаконно съдържание като детска порнография ви излага на **преки правни и цифрови рискове**. Вашият IP адрес и устройство се проследяват от органите на реда, което води до наказателна отговорност, независимо от намеренията ви. Тези платформи често са пълни със зловреден софтуер, който криптира файловете ви или ги използва за шантаж. Освен това те могат да откраднат банкови данни и пароли чрез фалшиви формуляри. Дори самото зареждане на страницата инсталира скриптове за следене, които компрометират вашата самоличност. Законът не прави разлика между „гледане“ и „съхранение“ – всяко взаимодействие с такива ресурси ви прави съучастник в тежко престъпление.

Child Porno site

  • Наказателно преследване и постоянен цифров запис на вашите действия.
  • Инфектиране на устройството с ransomware и шпионски софтуер.
  • Кражба на лични данни чрез фишинг страници и фалшиви плейъри.
  • Риск от въвличане в мрежи за трафик, които докладват на властите.

Правни последици от достъп до забранени материали в интернет

Child Porno site

Достъпът до сайтове с детско порно в България не е „просто гледане“ – законът третира всяко влизане като тежко престъпление, независимо дали си кликнал случайно или умишлено. Наказателният кодекс предвижда лишаване от свобода от 2 до 8 години дори за самото „придобиване“ на такъв материал, което включва и кеширането в браузъра ти. Прокуратурата може да повдигне обвинение и ако само си отворил линка, без да свалиш нищо – фактът, че си потърсил и получил достъп, вече формира състав на престъпление. На практика обаче „първото кликване“ често се доказва трудно, но всяко повторно влизане драстично увеличава риска от реален затвор. Освен това, след достъп до такива сайтове, доставчикът ти и органите на реда задължително получават IP log-ове, което води до претърсване на дома ти. И не очаквай „само глоба“ – ако имаш дори един записан файл, присъдата е ефективна, не условна.

Наказателна отговорност според българското законодателство

Съгласно българското законодателство, Наказателната отговорност според българското законодателство за достъп до сайтове с детско порно настъпва още при осъществяване на разпространение или държане на материали, а не само при тяхното създаване. Член 159а от Наказателния кодекс инкриминира придобиването и съхраняването на порнографски материали с лица под 18 години, като предвижда лишаване от свобода до шест години. Дори самото „сваляне“ на файл или системното разглеждане на такива уебстраници може да се квалифицира като държане, ако се докаже съзнателен контрол върху съдържанието. Тежестта на наказанието се увеличава, ако деянието е извършено чрез използване на информационни технологии, което поставя акцент върху дигиталната следа на потребителя. Важно е, че достъпът единствено до рекламна страница без реално възпроизвеждане на файл обикновено не формира състав на престъпление, но всяко последващо действие, като запазване на линкове или качване в облак, вече ангажира личната отговорност на лицето.

Разлика между случайно попадане и умишлено търсене

Разликата между случайно попадане и умишлено търсене е решаваща за правната квалификация на достъпа до забранено съдържание. Случайното попадане, например чрез изскачащ прозорец или подвеждащ линк, обикновено не води до наказателна отговорност, ако незабавно напуснете сайта и не записвате нищо. Обратно, умишленото търсене на детска порнография се доказва от историята на браузъра, използвани специфични заявки и повторяемост на действията — това формира състав на престъпление. Само защитата „попаднах случайно“ не е достатъчна, ако системните ви действия сочат към целенасочено проучване. Съдът оценява поведението ви като цяло, а не само единичния клик.

  • Случайно попадане: веднага затваряте страницата и не взаимодействате с нея.
  • Умишлено търсене: използвате зашифрован браузър или специфични думи, за да заобиколите филтри.
  • Случайно попадане: няма запазени файлове или отметки в историята.
  • Умишлено търсене: многократни посещения и изтегляне на материали – ключов белег за намерение.

Child Porno site

Технически механизми за блокиране на вредни страници

Техническите механизми за блокиране на вредни страници при детска порнография работят на няколко нива едновременно. DNS филтрирането拦截 заявките към известни домейни още преди браузърът да осъществи връзка, докато URL blacklist-ите в реално време блокират конкретни пътища в рамките на легални сайтове. По-агресивен е deep packet inspection (DPI), който разпознава hash-сигнатури на вече идентифицирани изображения и видеа – дори ако файлът е прекодиран или преоразмерен. Съвременните системи използват и AI-базиран анализ на метаданни и thumbnails, за да откриват ново съдържание без човешка намеса. За домашни потребители най-ефективно е комбинирането на родителски контрол с актуализирани списъци от неправителствени организации като IWF, които обменят данни с доставчиците на интернет.

Ключовото е скоростта: блокирането трябва да стане под секунда, иначе трафикът се пренасочва към резервни сървъри.

Техническите механизми не са перфектни – те изискват постоянно обновяване на базите данни и деклариране на новите тактики на престъпниците, но без тях разпространението би било неконтролируемо.

Родителски контрол и филтри за съдържание на браузъра

Родителският контрол в браузъра е първата защитна стена срещу случайно или умишлено достигане до сайтове с вредно съдържание. Чрез активиране на строги филтри за съдържание, като SafeSearch и блокери на домейни, се ограничава достъпът до категории, свързани с детска порнография. Дори най-добрият филтър изисква редовно update на черните списъци, за да разпознава новоизгрящите URL адреси с незаконни материали. Настройките на ниво DNS (като OpenDNS FamilyShield) предлагат мрежова защита, която надгражда локалните филтри на браузъра. Комбинирането на плъгини за блокиране на поп-up прозорци и HTTPS филтриране гарантира, че потребителят няма да бъде пренасочен към скрити галерии. Ефективният родителски контрол изисква многослойна филтрация – от настройките на браузъра до защита на цялото устройство, за да се създаде наистина безопасна онлайн среда за децата.

Родителският контрол и филтрите за съдържание на браузъра са основният практически механизъм за автоматично блокиране на достъпа до детска порнография, когато са правилно конфигурирани и постоянно обновявани.

Ролята на интернет доставчиците и националния регулатор

Когато става дума за блокиране на вредни страници с детско порно, интернет доставчиците са първата линия на защита – те прилагат технически филтри на DNS ниво, за да спрат достъпа до известни злонамерени домейни. Националният регулатор обаче поддържа актуален черен списък и издава задължителни разпореждания към доставчиците, които трябва да ги изпълнят в рамките на часове. Без тясното сътрудничество между тях, блокирането често заобикаля чрез смяна на IP адреси детска порнография или прокси сървъри. За вас като потребител това означава, че ако случайно попаднете на такъв сайт, сигналът до регулатора води до бърза реакция – доставчикът ви получава нареждане и страницата става недостъпна. Ролята на интернет доставчиците и националния регулатор е ежедневно да синхронизират базите си данни, за да не допуснат разпространение на незаконно съдържание.

Child Porno site

Какво да направите, ако попаднете на такъв ресурс

Ако случайно попаднете на такъв ресурс — било то чрез линк в съобщение, изскачащ прозорец или грешка в търсенето — първото нещо е да не кликвате нищо допълнително и да не сваляте какъвто и да е файл. Затворете незабавно браузъра и изключете интернет връзката, за да прекъснете комуникацията със сайта. След това включете отново мрежата и подайте сигнал до киберполицията или Националния център за безопасен интернет, като запишете точния URL адрес, но без да го отваряте повторно. Ако сте видели нещо случайно — не се паникьосвайте, но не го споделяйте с никого, защото дори препращането на линка е закононарушение. Помнете, че дори секунда на такъв екран оставя следа във вас, но вашата бърза реакция може да спаси дете, което чака точно този сигнал. Изтрийте историята и кеша, после говорете с доверен възрастен или психолог, ако усещате тежест от видяното.

Стъпки за докладване на сигурен и анонимен начин

Ако попаднеш на такъв ресурс, първо спри да сърфираш и не сваляй нищо – запази линка на сигурно място (например в бележник). После използвай браузър в режим „инкогнито” или VPN, за да прикриеш следите си, и подай сигнал през специализирани платформи като горещата линия на Центъра за безопасен интернет. Анонимното докладване не изисква лични данни – попълни само URL адреса, без да описваш съдържанието с думи. Ето ясната последователност:

  1. Копирай точния линк на страницата.
  2. Отвори сайта за докладване (например „signal.bg”) през частен прозорец.
  3. Постави линка във формата, избери категория „детска порнография”.
  4. Изпрати – след това изчисти историята на браузъра си.

Контакти с органите на МВР и центровете за киберсигурност

Ако попаднете на такъв ресурс, незабавно се свържете с органите на МВР – най-бързият начин е телефон 112 или сигнал до местното районно управление. Можете също да използвате специализираната платформа на ГДБОП за подаване на сигнали за престъпления в интернет, където екипите по киберсигурност анализират съдържанието и трафика. Центровете за киберсигурност към МВР приемат и анонимни доклади, включително скрийншоти и URL адреси, без да изискват лични данни при първоначалния контакт. Не се опитвайте сами да разследвате или сваляте материали – това може да ви инкриминира. Запазете само линка и времето на откриването, след което представете информацията на дежурния оператор.

Q: Към кого точно да се обърна при контакт с МВР за такъв сайт?
A: Обадете се на 112 или националния център за киберсигурност към ГДБОП – те имат дежурни експерти, които приемат сигнали 24/7 и предприемат незабавни действия по блокиране и разследване.

Психологически и социални аспекти на разпространението на незаконни файлове

Психологически и социални аспекти на разпространението на незаконни файлове от сайтове с детско порно включват тежко раздвоение у потребителя: от една страна, рационализация на деянието като „без жертва”, от друга — прогресираща изолация и загуба на емпатия. Социално, разпространителите изграждат затворени мрежи на взаимно одобрение, които нормализират девиацията и заглушават вината, което води до ескалация на търсенето. Жертвите, чиито файлове циркулират, изпитват вторична виктимизация при всяко споделяне, а разпространителят развива параноя и разпад на реални връзки. Психологическите аспекти на разпространението включват компулсивно поведение и когнитивни изкривявания, докато социалните аспекти разрушават доверието в общността и увековечават цикъл на насилие, който изисква професионална интервенция, а не само наказание.

Въздействие върху жертвите и обществото

Въздействието върху жертвите на сайтове с детско порно е дълготрайно и тежко, тъй като всяко сваляне и споделяне на файл възпроизвежда насилието, на което детето е било подложено. Жертвите живеят с постоянния страх, че техните снимки или видеа циркулират онлайн, което води до вторична виктимизация и сериозни психологически травми като посттравматичен стрес, депресия и срам. За обществото разпространението на такива файлове нормализира сексуалното насилие над деца и увеличава риска от реални посегателства, тъй като подхранва търсенето и създава среда, в която извършителите се чувстват по-уверени. Това ерозира обществения морал и натоварва системите за правосъдие и социални грижи.

  • Повишава нивата на тревожност и безсъние при пострадалите дори години след инцидента.
  • Засилва социалната стигма и самоизолацията на жертвите, които се страхуват от разкриване.
  • Увеличава разходите за психологическа рехабилитация и подкрепа на засегнатите семейства.
  • Намалява доверието в онлайн средата като безопасно пространство за децата.

Child Porno site

Как да разговаряте с децата си за рисковете в мрежата

Когато говорите с детето си за рисковете в мрежата, не започвайте със заплахи, а с любопитство към неговите онлайн игри и приятели. Поставете ясна граница: „Ако някой те кара да пазиш тайна или показва нещо неудобно – веднага ми кажи, без страх от наказание”. Обяснете, че има сайтове, които примамват с подаръци или фалшиви анкети, и че разговорът за сексуални изображения трябва да е нормален, а не срамен. Използвайте конкретни сценарии: „Какво ще направиш, ако получиш съобщение с гола снимка?” Репетирайте отговора – да затвори чата и да дойде при вас. Не разпитвайте веднъж годишно, а правете кратки ежедневни чекирания, например докато карате кола или готвите. Вашата цел е детето да ви възприема като безопасен съюзник, а не като цензор, за да потърси помощ при първия тревожен сигнал.

Говорете рано, спокойно и конкретно за капаните в мрежата, така че детето да знае: винаги може да дойде при вас без страх и осъждане.

Алтернативни ресурси за помощ и подкрепа на засегнати лица

Ако си засегнат от съдържание в сайт с детска порнография, знай, че не си сам – има алтернативни ресурси, които действат извън официалните институции. Онлайн платформи като „Сафер Интернет България“ и анонимни горещи линии за сигнали предлагат първа психологическа подкрепа и насоки без нужда от разкриване на самоличност. Можеш да се обърнеш към кризисни чатове, където обучени доброволци ще те изслушат и ще ти помогнат да прецениш следващите стъпки – от блокиране на достъпа до съобщаване на съответния хостинг. Важно е да разбереш, че дори самото гледане по невнимание може да остави травма, но помощта е налична и без съдебен път. За по-дългосрочна подкрепа потърси специализирани НПО-та по дигитална безопасност, които организират групови сесии или индивидуални консултации – всичко дискретно и на твой език.

Консултативни центрове и горещи линии за жертви

Жертвите на сексуална експлоатация онлайн могат да потърсят анонимна подкрепа в специализирани консултативни центрове и горещи линии, които работят с обучени психолози и юристи. Тези услуги предлагат кризисна интервенция, насоки за безопасно докладване на съдържание и дългосрочно психосоциално консултиране, без изискване за разкриване на самоличност пред органите. Достъпът е безплатен и често е достъпен 24/7 чрез телефон или чат. Ефективността на помощта зависи от бързата връзка с оператор, който познава спецификата на травмата от разпространение на интимни материали. Горещите линии за жертви на онлайн сексуално насилие координират действия с платформите за премахване на незаконно съдържание.

  • Осигуряват конфиденциална първоначална консултация и оценка на риска.
  • Подпомагат събирането на доказателства без повторно травмиране на жертвата.
  • Пренасочват към специализирани услуги за деца или пълнолетни лица.
  • Предоставят насоки за блокиране на разпространението и защита на дигиталната идентичност.

Програми за превенция и обучение по дигитална грамотност

Програмите за превенция и обучение по дигитална грамотност са първата защитна стена срещу въвличане в опасни мрежи. Те учат деца и родители как да разпознават съблазнителните тактики на извършителите в сайтове с незаконно съдържание. Чрез ролеви игри и симулации на реални сценарии, потребителите тренират безопасно поведение при неочакван контакт. Тези програми предоставят конкретни стъпки за блокиране, докладване и запазване на доказателства, без да влизат в директен диалог с насилника. Фокусът е върху изграждане на критично мислене към подозрителни линкове и профили. Ефективните курсове винаги включват практически наръчник за настройки за поверителност и родителски контрол, превръщайки превенцията в ежедневен навик, а не в еднократна лекция.

Какво представлява платформата и за кого е предназначена?

Основните функции на сайта в две изречения

Какви устройства и браузъри поддържа платформата за безпроблемен достъп?

Как да създадете акаунт и да настроите своя профил за първи път?

Стъпка по стъпка: регистрация чрез имейл или социални мрежи

Как да зададете родителски контрол и филтри за съдържание още при стартиране

Верификация на профила: какви документи и колко време отнема?

Как работи търсачката и филтрите за намиране на точното съдържание

Търсене по ключови думи, категории и тагове, които сайтът разпознава

Персонализирани филтри за възраст, разделителна способност и продължителност на видеото

Какви функции за гледане и сваляне предлага сайтът за удобна употреба?

Често задавани въпроси: Как да решаваме проблеми с буфериране и групово гледане?

Scroll to Top