diff -up ./interface_sortable_demos.css ../5.7/sites/all/modules/interface_sortable/interface_sortable_demos.css
--- ./interface_sortable_demos.css 2007-05-09 23:43:34.000000000 +0200
+++ ../5.7/sites/all/modules/interface_sortable/interface_sortable_demos.css 2008-02-20 15:50:20.125463408 +0100
@@ -14,3 +14,14 @@ div.sortable-item {
background: yellow;
width: 300px !important;
}
+.sortable-item .form-item {
+ display: inline;
+}
+
+.sortable-handle {
+ color: #a020f0;
+ font-size: 16px;
+ font-weight: bolder;
+ cursor: move;
+ margin-right: 5px;
+}
diff -up ./interface_sortable_demos.module ../5.7/sites/all/modules/interface_sortable/interface_sortable_demos.module
--- ./interface_sortable_demos.module 2007-05-09 23:43:34.000000000 +0200
+++ ../5.7/sites/all/modules/interface_sortable/interface_sortable_demos.module 2008-02-27 19:50:18.406619500 +0100
@@ -26,6 +26,15 @@ function interface_sortable_demos_menu($
'type' => MENU_NORMAL_ITEM
);
$items[] = array(
+ 'path' => 'demos/interface/sortable_advanced',
+ 'title' => t('Interface Sortable Advanced Demo'),
+ 'description' => t('Demonstrates advanced usage of sortable form elements.'),
+ 'callback' => 'drupal_get_form',
+ 'callback arguments' => 'interface_sortable_demos_sortable_advanced',
+ 'access' => user_access('access content'),
+ 'type' => MENU_NORMAL_ITEM
+ );
+ $items[] = array(
'path' => 'demos/interface/sortable_form_element_with_options',
'title' => t('Interface Sortable Form Element Demo With Options'),
'description' => t('Demonstrates a sortable form element with options.'),
@@ -100,6 +109,89 @@ function interface_sortable_demos_sortab
drupal_set_message('submitted: ['. implode(',', $sorted) .']');
}
+function interface_sortable_demos_sortable_advanced() {
+ _interface_sortable_demos_css();
+ $handle = '×';
+ $items = array(
+ 18 => 'eighteen',
+ 17 => 'seventeen',
+ 16 => 'sixteen',
+ 'cat' => 'meow',
+ 15 => 'fifteen',
+ 14 => 'fourteen',
+ 13 => 'thirteen',
+ 12 => 'twelve',
+ 'custom' => array(
+ '#type' => 'markup',
+ '#value' => 'Enter a custom number:',
+ '#prefix' => $handle,
+ 'inputfield' => array(
+ '#type' => 'textfield',
+ '#size' => 4,
+ '#default_value' => 20,
+ )
+ )
+ );
+ foreach ($items as $key => $value) {
+ if (is_array($value)) continue;
+ $items[$key] = array('#type' => 'markup', '#value' => $value, '#prefix' => $handle);
+ }
+
+ $options = array();
+ $options['accept'] = 'sortable-item';
+ $options['helperclass'] = 'sortable-helper';
+ $options['activeclass'] = 'sortable-active';
+ $options['hoverclass'] = 'sortable-hover';
+ $options['fx'] = 300;
+ $options['axis'] = 'vertically';
+ $options['opacity'] = 0.6;
+ $options['handle'] = 'span.sortable-handle';
+ $options['#onchange'] = << 'fieldset',
+ '#collapsible' => FALSE,
+ '#title' => t('Even numbers'),
+ '#description' => 'Drag the values using the ' . $handle
+ );
+ $form['odd'] = array(
+ '#type' => 'fieldset',
+ '#collapsible' => FALSE,
+ '#title' => t('Odd numbers')
+ );
+ $form['even']['sortee1'] = array(
+ '#type' => 'sortable',
+ '#items' => $items,
+ '#options' => $options,
+ '#inner_id' => 'sortee',
+ );
+ $form['odd']['sortee2'] = array(
+ '#type' => 'sortable',
+ '#items' => array(),
+ '#options' => $options,
+ '#inner_id' => 'sortee',
+ );
+
+ $form['submit'] = array('#type' => 'submit', '#value' => t('Submit'));
+
+ return $form;
+}
+
+function interface_sortable_demos_sortable_advanced_submit($form_id, $edit) {
+ $sorted1 = interface_get_sort($edit['sortee1'], 'sortee');
+ $sorted2 = interface_get_sort($edit['sortee2'], 'sortee');
+ drupal_set_message('Even: ['. implode(',', $sorted1) .']');
+ drupal_set_message('Odd: ['. implode(',', $sorted2) .']');
+ drupal_set_message(t('Custom number: !value', array('!value' => $_POST['inputfield'])));
+}
+
function interface_sortable_demos_sortable_form_element_with_options() {
_interface_sortable_demos_css();
diff -up ./interface_sortable.module ../5.7/sites/all/modules/interface_sortable/interface_sortable.module
--- ./interface_sortable.module 2007-05-09 23:43:34.000000000 +0200
+++ ../5.7/sites/all/modules/interface_sortable/interface_sortable.module 2008-02-27 15:53:12.595936692 +0100
@@ -64,13 +64,14 @@ function interface_sortable_process($ele
}
$outerid = $element['#parents'][0];
+ $innerid = array_key_exists('#inner_id', $element) ? $element['#inner_id'] : $outerid;
$sortables['#prefix'] = "<$outertag id='$outerid-wrapper' class='$outer_class'>\n";
$sortables['#suffix'] = "$outertag>\n";
// if there's a #value, eval it and resort
if ($element['#value']) {
- $keyorder = interface_get_sort($element['#value']);
+ $keyorder = interface_get_sort($element['#value'], $innerid);
$items = $element['#items'];
foreach ($keyorder as $key) {
$newitems[$key] = $items[$key];
@@ -80,13 +81,29 @@ function interface_sortable_process($ele
}
foreach ($element['#items'] as $k => $v) {
- $sortables[$k] = array(
+ $prefix = "<$innertag id='{$innerid}_{$k}' class='$inner_class'>";
+ $suffix = "$innertag>\n";
+ if (is_array($v)) {
+ $sortables[$k] = $v;
+ $sortables[$k]['#prefix'] = $prefix . (isset($v['#prefix']) ? $v['#prefix'] : '');
+ $sortables[$k]['#suffix'] = (isset($v['#suffix']) ? $v['#suffix'] : '') . $suffix;
+ }
+ else {
+ $sortables[$k] = array(
+ '#type' => 'markup',
+ '#value' => $v,
+ '#prefix' => $prefix,
+ '#suffix' => $suffix
+ );
+ }
+ $order[] = $k;
+ }
+ if (empty($element['#items'])) {
+ $order = array();
+ $sortables = array(
'#type' => 'markup',
- '#value' => $v,
- '#prefix' => "<$innertag id='{$outerid}_{$k}' class='$inner_class'>",
- '#suffix' => "$innertag>\n"
+ '#value' => $sortables['#prefix'] . $sortables['#suffix']
);
- $order[] = $k;
}
// If the user hasn't sent in an onchange handler, create a default
@@ -111,6 +128,7 @@ EOT;
'#theme' => 'interface_sortable_hidden',
'#value' => $value
);
+ unset($element['#options']);
return $element;
}
@@ -142,15 +160,16 @@ function theme_interface_sortable_hidden
* @param string $sort
* @return array
*/
-function interface_get_sort($sort) {
+function interface_get_sort($sort, $subst = '') {
$return = array();
parse_str($sort, $result);
$prefixes = array_keys($result);
if (!empty($prefixes)) {
$prefix = $prefixes[0];
+ if (empty($subst)) $subst = $prefix;
foreach ($result[$prefix] as $val) {
- if (strpos($val, $prefix .'_') === 0) {
- $val = substr($val, strlen($prefix) + 1);
+ if (strpos($val, $subst .'_') === 0) {
+ $val = substr($val, strlen($subst) + 1);
}
$return[] = $val;
}