¿Cómo habilitar el editor de contenido como un objetivo droppable con jQuery-ui?
Estoy intentando habilitar el editor de contenido de WordPress como un área droppable usando jQuery UI drag and drop. Sin embargo, no consigo que funcione el arrastre ni que se dispare el evento drop.
¿Hay algo que me esté faltando?
<ul id="keywords">
<li>arrastrar uno</li>
<li>arrastrar dos</li>
<li>arrastrar tres</li>
</ul>
jQuery("#keywords").find("li").each(function(){jQuery(this).draggable(
{
helper:'clone',
start: function(event, ui){
jQuery(this).fadeTo('fast', 0.5);},
stop: function(event, ui) {
jQuery(this).fadeTo(0, 1);
}
});
});
jQuery('#content').droppable(
{
drop: function(event, ui)
{
alert('elemento soltado en contenido'); //NO SE EJECUTA!!!
jQuery(this).dropIt(ui.draggable.html());
}
});
if(typeof tinyMCE=='object')
{
alert('tinyMCE está activo'); //NO SE EJECUTA!!!
jQuery('#editorcontainer').droppable(
{
drop: function(event, ui)
{
alert('elemento soltado en editor tinyMCE'); //NO SE EJECUTA!!!
//Añadir contenido dinámicamente
tinyMCE.activeEditor.execCommand('mceInsertContent', false, 'Nuevo contenido.');
}
});
}
En el ejemplo anterior, la siguiente línea:
jQuery(".myDiv").find("li").each(function(){
debería ser:
jQuery(".keywords").find("li").each(function(){
Eso debería permitir que los elementos de la lista sean arrastrados y soltados.
Para permitir que los elementos se solten en el área de texto de TinyMCE, el siguiente código funciona.
$('#editorcontainer').droppable({
drop: function(event, ui) {
alert('soltó'); //¡AHORA SE EJECUTA!
//Añadir contenido dinámicamente
tinyMCE.activeEditor.execCommand('mceInsertContent', false, 'Nuevo contenido.');
}
});

Eso fue solo un error de entrada cuando creé la pregunta. Lo he cambiado, pero ese no es el problema. Aún así no se dispara ningún evento de drop.

Intenta declarar en la etiqueta body de TinyMCE de esta manera, funciona para mí
En tiny_mce_src.js
t.iframeHTML += '</head><body ondrop="parent.drop(event);" " id="' + bi + '" class="mceContentBody '+ t.id +'_cl' + bc +'" onload="window.parent.tinyMCE.get(\'' + t.id + '\').onLoad.dispatch();"><br></body></html>';
En la página del editor:
function drop(ev)
{
ev.preventDefault();
var data=ev.dataTransfer.getData("Text");
tinyMCE.execCommand('mceInsertContent',true,data);
}
function allowDrop(ev) {
ev.preventDefault();
}
function drag(ev) {
var html = $('#'+ev.target.id).html();
ev.dataTransfer.setData("Text",html);
}
Parece que usar jQuery con TinyMCE no funciona...
