Чтобы воспроизвести это достаточно сделать следующее: переходим в Создать -> Добавить пост (posts/add). Появляется страница ввода необходимых данных, где после ввода заголовка предлагается добавить Картинку для привлечения внимания с той самой кнопкой. Далее открываем любой файловый менеджер (Проводник, TotalCommander) и пробуем перетащить любой файл в любое место на странице. Файл можно не отпускать на странице, а вернуть обратно в менеджер. При этом мы увидим как кнопка сменится зеленым полем.
Вопрос заключается в следующем — как можно ограничить поле действия кнопки приема изображения? Чтобы она срабатывала на прием "drop-объектов" только в определенной области, но не на все странице?
InstntCMS 2.2.1.
— открываешь файл fileuploader.js в используемом шаблоне
— ищешь (примерно строка 575)
qq.attach(document, 'dragenter', function(e){ if (!dz._isValidFileDrag(e)) return; dropArea.style.display = 'block'; });
qq.attach(document.getElementById('widget_image_picture'), 'dragenter', function(e){ if (!dz._isValidFileDrag(e)) return; dropArea.style.display = 'block'; });
Вечером за своим компом попробую.
Непонятно зачем fileuploader.js сразу ловит событие по всему документу, а не по определенному полю =(
аналогично в яндекс.диске например. Когда нужно загрузить файл дропом, то активно становиться все окно, и оно подсвечиваетсяНепонятно зачем fileuploader.js сразу ловит событие по всему документу, а не по определенному полю =(
$(document).on('dragenter', function(event) { $('.qq-upload-drop-area').hide(); // тупо не показываю область приема });
qq.attach(self._element, 'dragenter', function(e){ if (!dz._isValidFileDrag(e)) return; dropArea.style.display = 'block'; });
Остается нерешенным вопрос обработки qq.attach(document, 'dragleave', function(e){... Чтобы кнопка возвращалась назад при отводе курсора от drop-области. Ну пока не заморачивался с поиском решения.
А в целом текущее решение поля добавления изображения, IMHO, выглядит сыроватым. Оно конечно добавляет картинку куда надо, но… дьявол кроется в мелочах ©
Пусть даже остается dragenter на document'е, но тогда появляющееся кислотно-зеленое поле drop'а (см. рисунок выше) должно явно указывать что оно хочет принять файл изображения. В текущем виде смотрится больше как глюк какой-то)))
P.S. Инициализировать событие dragenter можно выделив кусок текста и немного сдвинуть его мышкой. Такое случайно может произойти у пользователя, и он увидит вывалившейся зеленый прямоугольник, вместо кнопки "Выбрать и загрузить"
Ну так это же можно решить просто версткой.Пусть даже остается dragenter на document'е, но тогда появляющееся кислотно-зеленое поле drop'а (см. рисунок выше) должно явно указывать что оно хочет принять файл изображения.
я просто привел пример. Какую область указывать это только твое дело)Понятно, что getElementById('widget_image_picture') не сработает если системное имя поля с картинкой будет не picture, а, например, photo)
mouseout не пойдет?Остается нерешенным вопрос обработки qq.attach(document, 'dragleave', function(e){… Чтобы кнопка возвращалась назад при отводе курсора от drop-области. Ну пока не заморачивался с поиском решения.
Это понятно))) Но не "можно", а "нужно" Причины я привел в посте выше.Ну так это же можно решить просто версткой.
В этой теме жду отклик сообщества что да как должно быть… Затем, по идее, надо подправить напильником и оформить pull request
Вариантов реализации думаю множество, нужно выбрать наиболее оптимальный.mouseout не пойдет?
Вообще с этим fileuploader'ом интересная история… Есть один форк — так называемый fileuploader 2 с рядом дополнений и исправлений, а есть официальный репозиторий в виде fineuploader — но это уже грузный монстр весом раза в 3-4 больше своего предшественника((
Можно еще порыть интернет, может есть какие более лучшие реализации или все же подрихтовать текущий исходник в соответствиями требованиями движка…