annotate modules/dnd_test/dnd_test.module @ 47:cbfe386cb51b

Add a function to refresh opened libraries. The source URL of each libraries is now tracked, which allows for auto refreshing the libraries based on various events. The obvious use case is to refresh the library when an atom has been added to Scald, for example via a Popups dialog.
author Franck Deroche <defr@ows.fr>
date Mon, 15 Feb 2010 14:08:04 +0000
parents 767ebf925654
children
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@28 10 'page callback' => 'dnd_test_dnd_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 $form['body_field']['body']['#dnd-enabled'] = TRUE;
eads@2 31 $form['body_field']['body']['#dnd-settings'] = array(
eads@2 32 'drop_selector' => '#edit-body-dnd-library .drop',
eads@28 33 'url' => 'dnd-test/library/?json',
eads@2 34 );
eads@2 35 $form['body_field']['body']['#rows'] = 28;
eads@2 36 }
eads@2 37 }
eads@2 38
eads@4 39 /**
eads@4 40 * Implementation of hook_theme().
eads@4 41 */
eads@4 42 function dnd_test_theme() {
eads@4 43 return array(
eads@4 44 'dnd_editor_item' => array(
eads@4 45 'arguments' => array('i' => NULL, 'size' => NULL),
eads@4 46 'template' => 'dnd-editor-item',
eads@4 47 ),
eads@4 48 'dnd_library_item' => array(
eads@4 49 'arguments' => array('i' => NULL),
eads@4 50 'template' => 'dnd-library-item',
eads@4 51 ),
eads@17 52 'dnd_library_preview' => array(
eads@17 53 'arguments' => array('i' => NULL),
eads@17 54 'template' => 'dnd-library-preview',
eads@17 55 ),
eads@31 56 'dnd_library_header' => array(
eads@31 57 'arguments' => array('page' => NULL),
eads@31 58 'template' => 'dnd-library-header',
eads@31 59 ),
eads@31 60 'dnd_library_footer' => array(
eads@31 61 'arguments' => array('page' => NULL),
eads@31 62 'template' => 'dnd-library-footer',
eads@31 63 ),
eads@4 64 );
eads@4 65 }
eads@4 66
eads@4 67 /**
eads@28 68 * Overloaded page callback.
eads@4 69 */
eads@28 70 function dnd_test_dnd_library($element = NULL) {
eads@28 71 $page = (array_key_exists('page', $_GET)) ? $_GET['page'] : 1;
eads@28 72 drupal_add_css(drupal_get_path('module', 'dnd_test') .'/dnd_test.css');
eads@28 73 drupal_json(dnd_test_generate_library($page));
eads@4 74 }
eads@2 75
eads@4 76 /**
eads@4 77 * Create contrived output
eads@4 78 */
eads@24 79 function dnd_test_generate_library($page = 1, $limit = 8) {
eads@4 80 $start = ($page * $limit) - ($limit);
eads@4 81 $end = $page * $limit;
eads@4 82
eads@28 83 $library = theme('dnd_library_header', $page);
eads@4 84 $editor_representations = array();
eads@17 85 $library_previews = array();
eads@4 86 for ($i=$start + 1; $i < $end + 1; $i++) {
eads@4 87 $library .= theme('dnd_library_item', $i);
eads@4 88 $editor_representations += dnd_editor_items($i);
eads@17 89 $library_previews['dnd-test-'. $i] = theme('dnd_library_preview', $i);
eads@4 90 }
eads@31 91 $library .= theme('dnd_library_footer', $page);
eads@31 92
eads@4 93 return array(
eads@4 94 'library' => $library,
eads@4 95 'editor_representations' => $editor_representations,
eads@17 96 'library_previews' => $library_previews,
eads@2 97 );
eads@4 98 }
eads@4 99
eads@4 100 /**
eads@4 101 * Theme wrapper that spins out multiple library representations for a given
eads@14 102 * editor representation. This is because we want to demonstrate how to allow
eads@4 103 * for multiple versions (i.e. different sizes) of a single item
eads@4 104 */
eads@4 105 function dnd_editor_items($i) {
eads@4 106 $item = array();
eads@4 107 foreach(array(t('S'), t('M'), t('L')) as $size) {
eads@24 108 $item[$i .'-'. $size] = array(
eads@24 109 'body' => theme('dnd_editor_item', $i, $size),
eads@24 110 'title' => 'Item '. $i .'-S',
eads@24 111 );
eads@2 112 }
eads@4 113 return $item;
eads@2 114 }
eads@4 115
eads@4 116 /**
eads@17 117 * Completely contrived library preview theme function
eads@17 118 */
eads@17 119 function template_preprocess_dnd_library_preview(&$variables) {
eads@17 120 template_preprocess_dnd_library_item($variables);
eads@17 121
eads@17 122 $variables['id'] = 'dnd-preview-'. $variables['i'];
eads@21 123 $variables['image'] = '<img src="http://'. $_SERVER['HTTP_HOST'] . base_path() . drupal_get_path('module', 'dnd_test') .'/img/item-'. $variables['img_num'] .'-S.jpg" class="drop" width="125" height="94" />';
eads@17 124
eads@21 125 $variables['description'] = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.';
eads@17 126 }
eads@17 127
eads@17 128
eads@17 129 /**
eads@4 130 * Completely contrived edit item theme function
eads@4 131 */
eads@4 132 function template_preprocess_dnd_library_item(&$variables) {
eads@12 133 global $_SERVER;
eads@12 134
eads@4 135 $i = $variables['i'];
eads@9 136
eads@9 137 if ($i % 3 == 0) {
eads@9 138 $img = 3;
eads@9 139 }
eads@9 140 else if ($i % 2 == 0) {
eads@9 141 $img = 2;
eads@9 142 }
eads@9 143 else {
eads@9 144 $img = 1;
eads@9 145 }
eads@9 146
eads@17 147 $variables['img_num'] = $img;
eads@17 148 $variables['id'] = 'dnd-test-'. $i;
eads@14 149 $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 150 $variables['title'] = t('Lorem Ipsum @count', array('@count' => $i));
eads@4 151 $variables['date'] = 'Feb 18 2009';
eads@4 152 $variables['author'] = 'David Eads';
eads@4 153 foreach(array(t('S'), t('M'), t('L')) as $size) {
eads@14 154 $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 155 }
eads@4 156 $variables['sizes'] = '<ul><li>'. implode('</li><li>', $sizes) .'</li></ul>';
eads@4 157 }
eads@4 158
eads@4 159 function template_preprocess_dnd_editor_item(&$variables) {
eads@4 160 list($i, $size) = array($variables['i'], $variables['size']);
eads@9 161
eads@9 162 if ($i % 3 == 0) {
eads@9 163 $img = 3;
eads@9 164 }
eads@9 165 else if ($i % 2 == 0) {
eads@9 166 $img = 2;
eads@9 167 }
eads@9 168 else {
eads@9 169 $img = 1;
eads@9 170 }
eads@23 171 $variables['image'] = theme('image', drupal_get_path('module', 'dnd_test') .'/img/item-'. $img .'-'. $size .'.jpg', '', '', array('class' => 'dnd-dropped', 'id' => 'dnd-id-'. $i));
eads@4 172 }
eads@20 173
eads@20 174 function template_preprocess_dnd_library_header(&$variables) {}
eads@31 175
eads@31 176 function template_preprocess_dnd_library_footer(&$variables) {}