Index: modules/book/book.admin.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/book/book.admin.inc,v retrieving revision 1.31 diff -u -p -r1.31 book.admin.inc --- modules/book/book.admin.inc 9 Jan 2010 21:54:00 -0000 1.31 +++ modules/book/book.admin.inc 17 Jan 2010 19:45:38 -0000 @@ -176,6 +176,16 @@ function _book_admin_table($node, &$form * @see book_admin_edit() */ function _book_admin_table_tree($tree, &$form) { + // Compute the appropriate #delta only for the first call: number of the + // book's pages won't change afterwards. + $delta = &drupal_static(__FUNCTION__); + $data = each($tree); + if (empty($delta)) { + $delta = (int)(db_query('SELECT COUNT(nid) - 1 siblings FROM {book} WHERE bid = :bid', array(':bid' => $data[1]['link']['bid']))->fetchField() / 2) + 1; + if ($delta < 15) { + $delta = 15; + } + } foreach ($tree as $data) { $form['book-admin-' . $data['link']['nid']] = array( '#item' => $data['link'], @@ -191,7 +201,7 @@ function _book_admin_table_tree($tree, & 'weight' => array( '#type' => 'weight', '#default_value' => $data['link']['weight'], - '#delta' => 15, + '#delta' => $delta, ), 'plid' => array( '#type' => 'textfield', Index: modules/book/book.module =================================================================== RCS file: /cvs/drupal/drupal/modules/book/book.module,v retrieving revision 1.536 diff -u -p -r1.536 book.module --- modules/book/book.module 9 Jan 2010 21:54:00 -0000 1.536 +++ modules/book/book.module 17 Jan 2010 19:45:40 -0000 @@ -497,12 +497,16 @@ function _book_add_form_elements(&$form, } $form['book']['plid'] = _book_parent_select($node->book); + $delta = (int)(db_query('SELECT COUNT(nid) - 1 siblings FROM {book} WHERE bid = :bid', array(':bid' => $form['book']['original_bid']['#value']))->fetchField() / 2) + 1; + if ($delta < 15) { + $delta = 15; + } $form['book']['weight'] = array( '#type' => 'weight', '#title' => t('Weight'), '#default_value' => $node->book['weight'], - '#delta' => 15, + '#delta' => $delta, '#weight' => 5, '#description' => t('Pages at a given level are ordered first by weight and then by title.'), );