Mercurial > defr > drupal > scald > dnd
diff modules/dnd_test/dnd_test.module @ 26:45c6c48c2a88
Moved dnd_test module.
author | David Eads <eads@chicagotech.org> |
---|---|
date | Wed, 11 Mar 2009 22:52:20 -0500 |
parents | dnd_test/dnd_test.module@4f58fa0a9a6d |
children | 7d6bf2dca269 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/modules/dnd_test/dnd_test.module Wed Mar 11 22:52:20 2009 -0500 @@ -0,0 +1,175 @@ +<?php + +/** + * Implementation of hook_menu(). + */ +function dnd_test_menu() { + $items = array(); + $items['dnd-test/library'] = array( + 'title' => 'Drag and drop test library', + 'page callback' => 'dnd_test_library', + 'access arguments' => array('access dnd test library'), + ); + return $items; +} + +/** + * Implementation of hook_perm(). + */ +function dnd_test_perm() { + return array('access dnd test library'); +} + +/** + * Implementation of hook_form_alter(). + * + * This demonstrates how to attach Drag and Drop to a given textarea. + */ +function dnd_test_form_alter(&$form, &$form_state) { + if ($form['#id'] == 'node-form' && $form['type']['#value'] == 'page') { + drupal_add_css(drupal_get_path('module', 'dnd_test') .'/dnd_test.css'); + $form['body_field']['body']['#dnd-enabled'] = TRUE; + $form['body_field']['body']['#dnd-settings'] = array( + 'drop_selector' => '#edit-body-dnd-library .drop', + 'url' => 'dnd-test/library', + ); + $form['body_field']['body']['#rows'] = 28; + } +} + +/** + * Implementation of hook_theme(). + */ +function dnd_test_theme() { + return array( + 'dnd_editor_item' => array( + 'arguments' => array('i' => NULL, 'size' => NULL), + 'template' => 'dnd-editor-item', + ), + 'dnd_library_item' => array( + 'arguments' => array('i' => NULL), + 'template' => 'dnd-library-item', + ), + 'dnd_library_preview' => array( + 'arguments' => array('i' => NULL), + 'template' => 'dnd-library-preview', + ), + 'dnd_library_header' => array( + 'arguments' => array('page' => NULL), + 'template' => 'dnd-library-header', + ), + ); +} + +/** + * Page callback that returns some JSON + */ +function dnd_test_library() { + $page = ($_GET['page']) ? $_GET['page'] : 1; + $test_library = dnd_test_generate_library($page); + return drupal_json(array( + 'header' => theme('dnd_library_header', $page), + 'library' => $test_library['library'], + 'editor_representations' => $test_library['editor_representations'], + 'library_previews' => $test_library['library_previews'], + 'footer' => '<div class="pager">'. l(t('1'), 'dnd-test/library') . ' '. l(t('2'), 'dnd-test/library', array('query' => array('page' => 2))) .'</div>', + )); +} + +/** + * Create contrived output + */ +function dnd_test_generate_library($page = 1, $limit = 8) { + $start = ($page * $limit) - ($limit); + $end = $page * $limit; + + $library = ''; + $editor_representations = array(); + $library_previews = array(); + for ($i=$start + 1; $i < $end + 1; $i++) { + $library .= theme('dnd_library_item', $i); + $editor_representations += dnd_editor_items($i); + $library_previews['dnd-test-'. $i] = theme('dnd_library_preview', $i); + } + return array( + 'library' => $library, + 'editor_representations' => $editor_representations, + 'library_previews' => $library_previews, + ); +} + +/** + * Theme wrapper that spins out multiple library representations for a given + * editor representation. This is because we want to demonstrate how to allow + * for multiple versions (i.e. different sizes) of a single item + */ +function dnd_editor_items($i) { + $item = array(); + foreach(array(t('S'), t('M'), t('L')) as $size) { + $item[$i .'-'. $size] = array( + 'body' => theme('dnd_editor_item', $i, $size), + 'title' => 'Item '. $i .'-S', + ); + } + return $item; +} + +/** + * Completely contrived library preview theme function + */ +function template_preprocess_dnd_library_preview(&$variables) { + template_preprocess_dnd_library_item($variables); + + $variables['id'] = 'dnd-preview-'. $variables['i']; + $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" />'; + + $variables['description'] = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.'; +} + + +/** + * Completely contrived edit item theme function + */ +function template_preprocess_dnd_library_item(&$variables) { + global $_SERVER; + + $i = $variables['i']; + + if ($i % 3 == 0) { + $img = 3; + } + else if ($i % 2 == 0) { + $img = 2; + } + else { + $img = 1; + } + + $variables['img_num'] = $img; + $variables['id'] = 'dnd-test-'. $i; + $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" />'; + $variables['title'] = t('Lorem Ipsum @count', array('@count' => $i)); + $variables['date'] = 'Feb 18 2009'; + $variables['author'] = 'David Eads'; + foreach(array(t('S'), t('M'), t('L')) as $size) { + $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" />'; + } + $variables['sizes'] = '<ul><li>'. implode('</li><li>', $sizes) .'</li></ul>'; +} + +function template_preprocess_dnd_editor_item(&$variables) { + list($i, $size) = array($variables['i'], $variables['size']); + + if ($i % 3 == 0) { + $img = 3; + } + else if ($i % 2 == 0) { + $img = 2; + } + else { + $img = 1; + } + $variables['image'] = theme('image', drupal_get_path('module', 'dnd_test') .'/img/item-'. $img .'-'. $size .'.jpg', '', '', array('class' => 'dnd-dropped', 'id' => 'dnd-id-'. $i)); +} + +function template_preprocess_dnd_library_header(&$variables) {}