annotate dnd_test/dnd_test.module @ 18:0d557e6e73f7

Added beautytips and some additional event handling code to the library.
author David Eads <eads@chicagotech.org>
date Fri, 06 Mar 2009 14:11:46 -0600
parents 1a77f87927dd
children 89fe0aca43d4
rev   line source
eads@2 1 <?php
eads@2 2
eads@4 3 /**
eads@4 4 * Implementation of hook_menu().
eads@4 5 */
eads@2 6 function dnd_test_menu() {
eads@2 7 $items = array();
eads@2 8 $items['dnd-test/library'] = array(
eads@2 9 'title' => 'Drag and drop test library',
eads@2 10 'page callback' => 'dnd_test_library',
eads@2 11 'access arguments' => array('access dnd test library'),
eads@2 12 );
eads@2 13 return $items;
eads@2 14 }
eads@2 15
eads@4 16 /**
eads@4 17 * Implementation of hook_perm().
eads@4 18 */
eads@2 19 function dnd_test_perm() {
eads@2 20 return array('access dnd test library');
eads@2 21 }
eads@2 22
eads@4 23 /**
eads@4 24 * Implementation of hook_form_alter().
eads@4 25 *
eads@4 26 * This demonstrates how to attach Drag and Drop to a given textarea.
eads@4 27 */
eads@2 28 function dnd_test_form_alter(&$form, &$form_state) {
eads@2 29 if ($form['#id'] == 'node-form' && $form['type']['#value'] == 'page') {
eads@2 30 drupal_add_css(drupal_get_path('module', 'dnd_test') .'/dnd_test.css');
eads@2 31 $form['body_field']['body']['#dnd-enabled'] = TRUE;
eads@2 32 $form['body_field']['body']['#dnd-settings'] = array(
eads@2 33 'drop_selector' => '#edit-body-dnd-library .drop',
eads@2 34 'url' => 'dnd-test/library',
eads@2 35 );
eads@2 36 $form['body_field']['body']['#rows'] = 28;
eads@2 37 }
eads@2 38 }
eads@2 39
eads@4 40 /**
eads@4 41 * Implementation of hook_theme().
eads@4 42 */
eads@4 43 function dnd_test_theme() {
eads@4 44 return array(
eads@4 45 'dnd_editor_item' => array(
eads@4 46 'arguments' => array('i' => NULL, 'size' => NULL),
eads@4 47 'template' => 'dnd-editor-item',
eads@4 48 ),
eads@4 49 'dnd_library_item' => array(
eads@4 50 'arguments' => array('i' => NULL),
eads@4 51 'template' => 'dnd-library-item',
eads@4 52 ),
eads@17 53 'dnd_library_preview' => array(
eads@17 54 'arguments' => array('i' => NULL),
eads@17 55 'template' => 'dnd-library-preview',
eads@17 56 ),
eads@4 57 );
eads@4 58 }
eads@4 59
eads@4 60 /**
eads@4 61 * Page call back that returns some JSON
eads@4 62 */
eads@2 63 function dnd_test_library() {
eads@4 64 $page = ($_GET['page']) ? $_GET['page'] : 1;
eads@4 65 $test_library = dnd_test_generate_library($page);
eads@4 66 return drupal_json(array(
eads@4 67 'header' => '<h3>'. t('Test library: Page @page', array('@page' => $page)) .'</h3>',
eads@4 68 'library' => $test_library['library'],
eads@4 69 'editor_representations' => $test_library['editor_representations'],
eads@17 70 'library_previews' => $test_library['library_previews'],
eads@4 71 'footer' => '<div class="pager">'. l(t('1'), 'dnd-test/library') . ' '. l(t('2'), 'dnd-test/library', array('query' => array('page' => 2))) .'</div>',
eads@4 72 ));
eads@4 73 }
eads@2 74
eads@4 75 /**
eads@4 76 * Create contrived output
eads@4 77 */
eads@10 78 function dnd_test_generate_library($page = 1, $limit = 12) {
eads@4 79 $start = ($page * $limit) - ($limit);
eads@4 80 $end = $page * $limit;
eads@4 81
eads@4 82 $library = '';
eads@4 83 $editor_representations = array();
eads@17 84 $library_previews = array();
eads@4 85 for ($i=$start + 1; $i < $end + 1; $i++) {
eads@4 86 $library .= theme('dnd_library_item', $i);
eads@4 87 $editor_representations += dnd_editor_items($i);
eads@17 88 $library_previews['dnd-test-'. $i] = theme('dnd_library_preview', $i);
eads@4 89 }
eads@4 90 return array(
eads@4 91 'library' => $library,
eads@4 92 'editor_representations' => $editor_representations,
eads@17 93 'library_previews' => $library_previews,
eads@2 94 );
eads@4 95 }
eads@4 96
eads@4 97 /**
eads@4 98 * Theme wrapper that spins out multiple library representations for a given
eads@14 99 * editor representation. This is because we want to demonstrate how to allow
eads@4 100 * for multiple versions (i.e. different sizes) of a single item
eads@4 101 */
eads@4 102 function dnd_editor_items($i) {
eads@4 103 $item = array();
eads@4 104 foreach(array(t('S'), t('M'), t('L')) as $size) {
eads@12 105 $item[$i .'-'. $size] = theme('dnd_editor_item', $i, $size);
eads@2 106 }
eads@4 107 return $item;
eads@2 108 }
eads@4 109
eads@4 110 /**
eads@17 111 * Completely contrived library preview theme function
eads@17 112 */
eads@17 113 function template_preprocess_dnd_library_preview(&$variables) {
eads@17 114 template_preprocess_dnd_library_item($variables);
eads@17 115
eads@17 116 $variables['id'] = 'dnd-preview-'. $variables['i'];
eads@18 117 $variables['image'] = '<img src="http://'. $_SERVER['HTTP_HOST'] . base_path() . drupal_get_path('module', 'dnd_test') .'/img/item-'. $variables['img_num'] .'-M.jpg" class="drop" width="300" height="225" />';
eads@17 118
eads@17 119 $variables['description'] = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.';
eads@17 120 }
eads@17 121
eads@17 122
eads@17 123 /**
eads@4 124 * Completely contrived edit item theme function
eads@4 125 */
eads@4 126 function template_preprocess_dnd_library_item(&$variables) {
eads@12 127 global $_SERVER;
eads@12 128
eads@4 129 $i = $variables['i'];
eads@9 130
eads@9 131 if ($i % 3 == 0) {
eads@9 132 $img = 3;
eads@9 133 }
eads@9 134 else if ($i % 2 == 0) {
eads@9 135 $img = 2;
eads@9 136 }
eads@9 137 else {
eads@9 138 $img = 1;
eads@9 139 }
eads@9 140
eads@17 141 $variables['img_num'] = $img;
eads@17 142 $variables['id'] = 'dnd-test-'. $i;
eads@14 143 $variables['image'] = '<img src="http://'. $_SERVER['HTTP_HOST'] . base_path() . drupal_get_path('module', 'dnd_test') .'/img/item-'. $img .'-thumb.jpg?dnd_id='. $i .'-M" class="drop" />';
eads@4 144 $variables['title'] = t('Lorem Ipsum @count', array('@count' => $i));
eads@4 145 $variables['date'] = 'Feb 18 2009';
eads@4 146 $variables['author'] = 'David Eads';
eads@4 147 foreach(array(t('S'), t('M'), t('L')) as $size) {
eads@14 148 $sizes[] = '<img src="http://'. $_SERVER['HTTP_HOST'] . base_path() . drupal_get_path('module', 'dnd_test') .'/img/icon/'. $size .'.png?dnd_id='. $i .'-'. $size .'" class="drop" />';
eads@4 149 }
eads@4 150 $variables['sizes'] = '<ul><li>'. implode('</li><li>', $sizes) .'</li></ul>';
eads@4 151 }
eads@4 152
eads@4 153
eads@4 154 function template_preprocess_dnd_editor_item(&$variables) {
eads@4 155 list($i, $size) = array($variables['i'], $variables['size']);
eads@9 156
eads@9 157 if ($i % 3 == 0) {
eads@9 158 $img = 3;
eads@9 159 }
eads@9 160 else if ($i % 2 == 0) {
eads@9 161 $img = 2;
eads@9 162 }
eads@9 163 else {
eads@9 164 $img = 1;
eads@9 165 }
eads@15 166 $variables['image'] = theme('image', drupal_get_path('module', 'dnd_test') .'/img/item-'. $img .'-'. $size .'.jpg', 'foo', 'foo', array('class' => 'dnd-dropped'));
eads@4 167 }