Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/js/burlakastudio.realcommenter/ |
Upload File : |
'use strict'; function realcommenter_dragndrop_ajax_request() { if ( typeof this === 'undefined' || !this ) { return; } let form_obj= this.closest( realcommenter_get_selector( 'form' ) ); if ( !form_obj ) { return; } let data_comment_for= form_obj.getAttribute( 'data-form-to' ); realcommenter_tint_area( 1, this ); BX.ajax({ url: '/bitrix/admin/burlakastudio.realcommenter.dragndrop_ajax.php', method: 'POST', data: { LANGUAGE_ID: BX.message('LANGUAGE_ID'), SITE_ID: BX.message('SITE_ID'), INPUT_NAME: "NEW_COMMENT_FILES_" + data_comment_for + '_', CONTROL_ID: 'BRCMD7_' + data_comment_for + '_' }, onsuccess: realcommenter_dragndrop_ajax_success, onfailure: function() { console.log( 'dragndrop error' ); } }); } /** * Получили загрузчик, добавляем блок загрузки файлов и открываем его */ function realcommenter_dragndrop_ajax_success( result ) { realcommenter_tint_area( 0 ); /** * this содержит объект с параметрами аякс-отправки * Один из ключей — data — содержит склеенную строку параметров, например: * INPUT_NAME=NEW_COMMENT_FILES_456_&CONTROL_ID=BRCMD7_456_ * * ...где 456 — код комментария, на который оставляем ответ. * Этот же код идентифицирует форму, из которой производилась отправка */ /** * Нам нужно определить, в какую из форм предназначался загрузчик * (смотрим на CONTROL_ID) * * Находим эту форму, генерим внутри область загрузки, * вставляем её перед сабмит-областью * * Публикуем внутрь загрузчик */ if ( typeof this === 'undefined' || !this || typeof this.data === 'undefined' || !this.data ) { return; } let matches= this.data.match( /&CONTROL_ID=BRCMD7_([0-9]+)_$/ ); if ( !matches || !matches[ 1 ] ) { return; } let target_id= matches[ 1 ]; let form_obj= document.querySelector( realcommenter_get_selector( 'form' ) + '[data-form-to="' + target_id + '"]' ); if ( !form_obj ) { return; } let submit_obj= form_obj.querySelector( realcommenter_get_selector( 'submit_block' ) ); if ( !submit_obj ) { return; } let upload_obj= document.createElement( 'div' ); upload_obj.className= 'brf_uploads'; upload_obj.innerHTML= result; submit_obj.parentNode.insertBefore( upload_obj, submit_obj ); /** * Отключаем у скрепки реакцию на клик * Ставим ей нулевой индикатор */ let button_obj= form_obj.querySelector( realcommenter_get_selector( 'upload_picker' ) ); if( button_obj ) { button_obj.removeEventListener( 'click', realcommenter_dragndrop_ajax_request ); button_obj.setAttribute( 'data-indicator', '0' ); } realcommenter_dragndrop_ajax_MFIS_awaiter(); } function realcommenter_dragndrop_ajax_MFIS_awaiter() { if ( typeof window.MFIDD === 'undefined' ) { setTimeout( realcommenter_dragndrop_ajax_MFIS_awaiter, 100 ); } else { setTimeout( realcommenter_dragndrop_ajax_activator, 500 ); } } function realcommenter_dragndrop_ajax_activator() { // Сканируем ссылки drag_n_drop и "кликаем" по ним let links= document.querySelectorAll( '[id^="file-selectdialogswitcher-"]' ); if ( links && links.length ) { links.forEach(function( item ) { item.click(); /** * <a> id: * file-selectdialogswitcher-#CONTROL_ID# * * <div> id: * file-selectdialog-#CONTROL_ID# * * > .file-extended * ...должен быть display: block * */ let div_id= item.id.replace( /-selectdialogswitcher-/, '-selectdialog-' ); let obj= item.parentNode.querySelector( '#' +div_id + ' > .file-extended' ); if ( obj ) { setTimeout( realcommenter_dragndrop_ajax_extended_block_check.bind( item, obj ), 2000 ); } /** * Подписываемся на событие успешной загрузки файла */ BX.addCustomEvent( BX(div_id).parentNode, 'OnFileUploadSuccess', realcommenter_dragndrop_ajax_OnFileUploadSuccess ); /** * Подписываемся на событие успешного удаления файла */ BX.addCustomEvent( BX(div_id).parentNode, 'OnFileUploadRemove', realcommenter_dragndrop_indicator_after_delete ); }) } } function realcommenter_dragndrop_ajax_OnFileUploadSuccess( file_data, controller_data ) { /** * Отправляем на ресайз только если это картинка * * file_data: [ * element_content_type: "image/jpeg" * element_id: "51" * element_image: undefined * element_name: "30-01-title.jpg" * element_size: "960.36 КБ" * element_thumbnail: undefined * element_url: "/bitrix/components/bitrix/main.file.input/ajax.php?mfi_mode=down&fileID=51&cid=0132a2e203087d50e19e02ab7e7be7e7&sessid=60cdd15e4c4fd336a002e717bbb35c8a&s=f58721cc078c49e6421b6708330076c55b8234188452f10c70ec2a48dc29f6b3" * storage: "bfile" * success: true * ] */ if( typeof file_data !== 'undefined' && file_data && file_data[ 'element_id' ] ) { if( ~file_data[ 'element_content_type' ].indexOf( 'image/' ) ) { BX.ajax( { url: '/bitrix/admin/burlakastudio.realcommenter.image_processor.php', method: 'POST', dataType: 'json', data: { file_id: file_data[ 'element_id' ], }, onsuccess: realcommenter_dragndrop_place_thumb } ); } realcommenter_dragndrop_indicator_after_upload( file_data[ 'element_id' ] ); } } /** * Нам нужно обновить индикатор у скрепки * * Нам передали id загруженного файла. * По нему находим нужную форму и в ней - скрепку. * */ function realcommenter_dragndrop_indicator_after_upload( file_id ) { /** * Превью находится в * tr#wd-doc51 */ let td_obj= document.querySelector( 'tr#wd-doc' + file_id ); /** * Нужен родитель, внутри него найдём все input[type="hidden"] с загруженными файлами. * Их количество и помещаем в индикатор */ let parent_obj= td_obj.closest( 'div[id^="file-selectdialog-"]' ); if ( !parent_obj ) { return; } realcommenter_dragndrop_update_indicator( parent_obj ); } function realcommenter_dragndrop_indicator_after_delete( removed_file_id, _controller ) { if( typeof _controller === 'undefined' || !_controller || !_controller.controller ) { return; } /** * _controller.controller - DOM-объект формы загрузки * * Внутри строка ещё не удалена, индикатор даст неверное число, если вызвать сразу */ setTimeout( realcommenter_dragndrop_update_indicator.bind( this, _controller.controller ), 500 ); } function realcommenter_dragndrop_update_indicator( parent_obj ) { let form_obj= parent_obj.closest( realcommenter_get_selector( 'form' ) ); if ( !form_obj ) { return; } let button_obj= form_obj.querySelector( realcommenter_get_selector( 'upload_picker' ) ); if ( !button_obj ) { return; } let uploaded_list= parent_obj.querySelectorAll( 'input[type="hidden"][id^="file-"]' ); button_obj.setAttribute( 'data-indicator', '' + uploaded_list.length ); } function realcommenter_dragndrop_ajax_extended_block_check( obj ) { /** * this - ссылка, на которую мы кликали. * Её теперь не нужно, а при открытии новых форм она может вмешиваться * в querySelectorAll */ this.parentNode.removeChild( this ); /** * Страхуемся - * убеждаемся, что область загрузки открылась */ obj.style.display= 'block'; } function realcommenter_dragndrop_place_thumb( json_result ) { /** * Получаем массив, внутри ключ [THUMB] с путём к ресайзу. * Публикуем этот ресайз в строку с информацией о загруженном файле * * !!! Может и не быть - мало ли: нам загрузили *.docx, а мы попытались его ресайзнуть =) */ if ( typeof json_result !== 'undefined' && json_result && json_result[ 'file_info' ] ) { /** * Превью должно находиться в * tr#wd-doc51 td.files-name */ let td_obj= document.querySelector( 'tr#wd-doc' + json_result[ 'file_info' ][ 0 ][ 'file_id' ] + ' td.files-name' ); if ( td_obj ) { td_obj.innerHTML= ''; let thumb_obj= document.createElement( 'img' ); thumb_obj.src= json_result[ 'file_info' ][ 0 ][ 'THUMB' ]; td_obj.appendChild( thumb_obj ); } } }