Mercurial > defr > drupal > scald > dnd
view dnd.module @ 35:abc9d39cfbe9
Switch the trigger from mouseover to click.
MouseOver is problematic if people want to interact with the content of the
popup, for example to click the play button of an swf player.
author | Franck Deroche <franck@defr.org> |
---|---|
date | Fri, 18 Sep 2009 15:11:03 +0200 |
parents | a9dc86da7be8 |
children | af6627970bc4 |
line wrap: on
line source
<?php // A suffix for auto generated IDs define(DND_ID_SUFFIX, '-dnd-library'); /** * Implementation of hook_menu(). */ function dnd_menu() { $items = array(); $items['admin/settings/dnd'] = array( 'title' => 'Drag and Drop Library', 'page callback' => 'dnd_admin', 'description' => 'Configure drag-and-drop enabled textareas.', 'access arguments' => array('administer dnd'), 'file' => 'dnd.admin.inc', ); return $items; } /** * Implementation of hook_perm(). */ function dnd_perm() { return array('administer dnd'); } /** * Implementation of hook_theme(). */ function dnd_theme() { return array( 'dnd_library_wrapper' => array('arguments' => array('settings' => NULL, 'element' => NULL)), ); } /** * Implementation of hook_elements(). * * Overload textareas. */ function dnd_elements() { $type = array(); $type['textarea'] = array( '#input' => TRUE, '#cols' => 60, '#rows' => 5, '#resizable' => TRUE, '#dnd-enabled' => FALSE, '#dnd-settings' => NULL, '#process' => array('form_expand_ahah', 'dnd_process_textarea'), ); return $type; } /** * Settings array: * What should it take, if anything? Probably a source * maybe editor specific configuration shit? * * - source for library json/ajax shit * - target selector * - item selector * * perhaps like so: * * global => * droppable targets * library source for textarea * * tinymce/othereditor => * target selector logic * configuration options * callback should be smart about attachment and detachment */ function dnd_process_textarea($element, $edit, $form_state, $form) { if ($element['#dnd-enabled']) { $settings = array(); // We take a string or an object or an array if (is_string($element['#dnd-settings'])) { // @TODO load settings } else if (is_object($element['#dnd-settings'])) { $settings = (array) $element['#dnd-settings']; } else if (is_array($element['#dnd-settings'])) { $settings = $element['#dnd-settings']; } $settings = array('library_id' => $element['#id'] . DND_ID_SUFFIX) + $settings; // BeautyTips drupal_add_js(drupal_get_path('module', 'dnd') .'/js/bt/other_libs/excanvas_0002/excanvas-compressed.js'); drupal_add_js(drupal_get_path('module', 'dnd') .'/js/bt/other_libs/jquery.hoverIntent.minified.js'); drupal_add_js(drupal_get_path('module', 'dnd') .'/js/bt/jquery.bt.js'); // Dependencies drupal_add_js(drupal_get_path('module', 'dnd') .'/js/jquery.url.packed.js'); drupal_add_js(drupal_get_path('module', 'dnd') .'/js/jquery.fieldselection.js'); drupal_add_js('misc/jquery.form.js'); // Drag and drop drupal_add_js(drupal_get_path('module', 'dnd') .'/js/jquery.draganddrop.js'); drupal_add_js(drupal_get_path('module', 'dnd') .'/js/dnd-library.js'); drupal_add_js(array( 'dndEnabledLibraries' => array($element['#id'] => $settings), ), 'setting'); // Generate $element['#prefix'] .= '<div class="dnd-library-wrapper" id="'. $settings['library_id'] .'"></div><div class="dnd-fields-wrapper">'; $element['#suffix'] = '</div>'; if (module_exists('mee')) { drupal_add_css(drupal_get_path('module', 'mee') .'/css/mee.css'); } } return $element; } /** * Implementation of hook_wywiwyg_plugin(). */ function dnd_wysiwyg_plugin($editor, $version=0) { $plugins = array(); switch ($editor) { case 'tinymce': if ($version > 3) { $plugins['forcecontainer'] = array( 'title' => t('Force Container Plugin'), 'description' => t('A custom plugin to forces a selection up to the outer container of a given element.'), 'extensions' => array('forcecontainer' => t('Force Container')), 'path' => drupal_get_path('module', 'dnd') .'/js/tinymce/forcecontainer/editor_plugin_src.js', 'load' => TRUE, 'options' => array( 'forcecontainer_class' => 'dnd-drop-wrapper', 'forcecontainer_trigger_dnd' => TRUE, ), ); } break; } return $plugins; } /** * Theme the markup that will surround a library loaded via JSON. */ function theme_dnd_library_wrapper($settings, $element = NULL) { return '<div id="'. $settings['library_id'] .'" class="dnd-library-wrapper"></div>'; }