Mercurial > defr > drupal > scald > dnd
view js/dnd-library.js @ 4:c2eb995212bf
TONS of fixes in this commit.
author | David Eads <eads@chicagotech.org> |
---|---|
date | Thu, 19 Feb 2009 12:33:19 -0600 |
parents | 5a44c430b7ac |
children | 99ba5941779c |
line wrap: on
line source
Drupal.behaviors.dndLibrary = function(context) { $('.dnd-library-wrapper:not(.dnd-processed)', context).each(function() { var $this = $(this); // This is a bad hack to lop off '-dnd-library' from the id to get the editor name var editor = this.id.slice(0, -12); // Attempt to attach library //Drupal.behaviors.dndLibrary.attach_library(false, Drupal.wysiwyg.instances[editor]); // Bind Drag and Drop plugin invocation to wywsiwygAttach event $('#' + editor).bind('wysiwygAttach', Drupal.behaviors.dndLibrary.attach_library); // @TODO track and clear intervals to save memory at the cost of // more processing? $('#' + editor).bind('wysiwygDetach', Drupal.behaviors.dndLibrary.detach_library); // Ajax pager $('.pager a', $this).click(function(e, data) { $.getJSON(this.href, function(data) { $('.header', $this).html(data.header); $('.library', $this).html(data.library); //$('.footer', $this).html(data.footer); for (editor_id in data.editor_representations) { Drupal.settings.dndEditorRepresentations[editor_id] = data.editor_representations[editor_id]; } var params = Drupal.wysiwyg.instances[editor]; $('#' + editor).trigger('wysiwygAttach', params); }); return false; }); $this.addClass('dnd-processed'); }); } Drupal.behaviors.dndLibrary.attach_library = function(e, data) { var settings = { renderRepresentation: function(target, drop, representation_id) { return Drupal.settings.dndEditorRepresentations[representation_id]; } } settings = $.extend(settings, Drupal.settings.dndEnabledLibraries[data.field]); var editor_fn = 'attach_' + data.editor; if ($.isFunction(window.Drupal.behaviors.dndLibrary[editor_fn])) { window.Drupal.behaviors.dndLibrary[editor_fn](data, settings); } } Drupal.behaviors.dndLibrary.detach_library = function(e, data) { console.log('detach'); } Drupal.behaviors.dndLibrary.attach_tinymce = function(data, settings) { var tiny_instance = tinyMCE.getInstanceById(data.field); // If the Tiny instance exists, attach directly, otherwise wait until Tiny // has registered a new instance. if (tiny_instance) { Drupal.behaviors.dndLibrary._attach_tinymce(data, settings, tiny_instance); } else { var t = setInterval(function() { var tiny_instance = tinyMCE.getInstanceById(data.field); if (tiny_instance) { Drupal.behaviors.dndLibrary._attach_tinymce(data, settings, tiny_instance); clearInterval(t); } }, 100); } } Drupal.behaviors.dndLibrary._attach_tinymce = function(data, settings, tiny_instance) { settings = $.extend({ targets: $('#'+ data.field +'-wrapper iframe'), insertAfter: '<p><span id="__caret">_</span></p>', postprocessDrop: function(target, drop, element) { // Get our special span, select it, delete it, and hope the caret // resets correctly. tiny_instance.selection.select(tiny_instance.dom.get('__caret')); tiny_instance.execCommand('Delete', false, null); tiny_instance.dom.remove('__caret'); // Add some classes to the library items $(element).addClass('dnd-inserted'); $(element).parents('.editor-item').addClass('dnd-child-inserted'); } }, settings); $(settings.drop_selector).dnd(settings); }