Как получить объект диапазона, соответствующий положению события перетаскивания? - PullRequest
0 голосов
/ 03 октября 2011

Я хочу перетащить изображения в редактируемое поле Алоха.

Я смотрю на at.tapo.aloha.plugins.Image плагин, который выглядит великолепно.

Однако мне нужно адаптировать этот плагин для работы с миниатюрами. Я перетаскиваю миниатюру, и когда я помещаю ее в редактируемый файл Aloha, HTML-код изменяется на лету, чтобы использовать реальное изображение.

    GENTICS.Aloha.EventRegistry.subscribe(GENTICS.Aloha, 'editableCreated', function(event, editable) {
        var the_obj = editable.obj;
        jQuery(editable.obj).bind('drop', function(event){
            var e = event.originalEvent;
            var files = e.dataTransfer.files;
            var count = files.length;

            if (count < 1) {
                var node = e.dataTransfer.mozSourceNode;
                if (node.tagName === 'IMG') {
                    var html = '<img ....>'; //build the real image html code  
                    /// The current selection but I want the drop position
                    var range = GENTICS.Aloha.Selection.getRangeObject();
                    if (!jQuery.isEmptyObject(range)) {
                        GENTICS.Utils.Dom.insertIntoDOM(jQuery(html), range, the_obj);
                    }
                    return false;
                }
                return true;
            }
    }

Работает нормально, когда что-то выбрано в поле алоха. Я могу получить диапазон и вставить HTML в DOM в позиции выбора.

Тем не менее, я хотел бы получить объект диапазона, который соответствует месту, где мое изображение сброшено. Как это сделать?

Заранее спасибо за идеи.

Ответы [ 2 ]

0 голосов
/ 04 октября 2011

Тим Даун показал мне, что простого пути нет, и я наконец-то воспользовался обходным решением:

GENTICS.Aloha.EventRegistry.subscribe(GENTICS.Aloha, 'editableCreated', function(event, editable) {
    var the_obj = editable.obj;
    jQuery(editable.obj).bind('drop', function(event){
        setTimeout(function () {
            //at this point the html is updated and can be postprocessed 
            //in order to turn thumbnails into the real image

            //force the focus in order to make sure that the editable is activated
            //this will cause the deactivated event to be triggered, and the content to be saved
            the_obj.focus(); 
        }, 0);
    });
});
0 голосов
/ 04 октября 2011

В общем, я не знаю простой способ сделать это.Вы можете получить пиксельные координаты для точки отбрасывания (возможно, из события mousemove), а затем попытаться получить диапазон для этой точки.Для этой задачи ответ на следующий вопрос хорошо подводит итог:

Создание свернутого диапазона из позиции пикселя в FF / Webkit

...