### Eclipse Workspace Patch 1.0
#P drupal-contrib-5
Index: modules/panels/content_types/custom.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/panels/content_types/custom.inc,v
retrieving revision 1.2.4.2
diff -u -r1.2.4.2 custom.inc
--- modules/panels/content_types/custom.inc	15 Mar 2007 23:13:41 -0000	1.2.4.2
+++ modules/panels/content_types/custom.inc	8 Jan 2008 23:20:01 -0000
@@ -1,113 +1,119 @@
-<?php
-/**
- * Callback function to supply a list of content types.
- */
-function panels_custom_panels_content_types() {
-  $items['custom'] = array(
-    'callback' => 'panels_content_custom',
-    'admin' => 'panels_admin_custom',
-  );
-  return $items;
-}
-
-/**
- * Output function for the 'custom' content type. Outputs a custom
- * based on the module and delta supplied in the configuration.
- */
-function panels_content_custom($conf) {
-  $title      = filter_xss_admin($conf['title']);
-  $css_id     = filter_xss_admin($conf['css_id']);
-  $css_class  = filter_xss_admin($conf['css_class']);
-  $body       = check_markup($conf['body'], $conf['format'], FALSE);
-  return theme('panels_content_custom', $title, $body, $css_id, $css_class);
-}
-
-function theme_panels_content_custom($title, $body, $css_id = NULL, $css_class = NULL) {
-  if ($css_id) {
-    $css_id = ' id="'. $css_id .'"';
-  }
-  if ($css_class) {
-    $css_class = ' '. $css_class;
-  }
-  $output = '<div class="panel-custom'. $css_class .'"'. $css_id .'>';
-  if ($title) {
-    $output .= '<h2 class="title">' . $title . '</h2>';
-  }
-  $output .= $body;
-  $output .= '</div>';
-  return $output;
-}
-/** 
- * Callback to perform administrative functions on the content block
- */
-function panels_admin_custom($op, &$arg, $arg2 = NULL) {
-  switch ($op) {
-    case 'list':
-      $conf = $arg;
-      return '<strong>Custom</strong>: ' . filter_xss_admin($conf['title']);
-    case 'add button':
-      $form['title'] = array(
-        '#title' => t('Enter an optional title for custom content you define'),
-        '#type' => 'textfield',
-        '#maxlength' => 512,
-        '#weight'  => -10,
-      );
-      $form['submit'] = array(
-        '#type' => 'button',
-        '#value' => t('Add custom'),
-      );
-
-      $form['#prefix'] = '<div class="container-inline">';
-      $form['#suffix'] = '</div>';
-      return $form;
-    case 'add':
-      if ($_POST['op'] != t('Add custom')) {
-        return;
-      }
-      return $arg;
-    case 'edit':
-      $conf = &$arg;
-      $form['title'] = array(
-        '#type' => 'textfield',
-        '#default_value' => $conf['title'],
-        '#title' => t('Title'),
-        '#description' => t('Title'),
-        '#size' => 15,
-      );
-      $form['body'] = array(
-        '#title' => t('Body'),
-        '#type' => 'textarea',
-        '#default_value' => $conf['body'],
-        '#rows' => 10,
-        '#cols' => 20,
-      );
-      $arg2[] = 'format';
-      $form['format'] = filter_form($conf['format'], 1, $arg2);
-
-      $form['css_id'] = array(
-        '#type' => 'textfield',
-        '#default_value' => $conf['css_id'],
-        '#title' => t('CSS ID'),
-        '#description' => t('CSS ID of this custom content.'),
-        '#weight' => 2,
-        '#size' => 15,
-      );
-      $form['css_class'] = array(
-        '#type' => 'textfield',
-        '#default_value' => $conf['css_class'],
-        '#title' => t('CSS class'),
-        '#description' => t('CSS class of this custom content.'),
-        '#weight' => 2,
-        '#size' => 15,
-      );
-      return $form;
-    case 'validate':
-      // This one has nothing to validate.
-      $form = &$arg;
-      return;
-    case 'save':
-      // For this one, the form values go directly into the config.
-      $form = &$arg;
-      return $form;
-  }
-}
+<?php
+// $Id: $
+
+/**
+ * Callback function to supply a list of content types.
+ */
+function panels_custom_panels_content_types() {
+  $items['custom'] = array(
+    'callback' => 'panels_content_custom',
+    'admin' => 'panels_admin_custom',
+  );
+  return $items;
+}
+
+/**
+ * Output function for the 'custom' content type. Outputs a custom
+ * based on the module and delta supplied in the configuration.
+ */
+function panels_content_custom($conf) {
+  $title      = filter_xss_admin($conf['title']);
+  $css_id     = filter_xss_admin($conf['css_id']);
+  $css_class  = filter_xss_admin($conf['css_class']);
+  $body       = check_markup($conf['body'], $conf['format'], FALSE);
+  return theme('panels_content_custom', $title, $body, $css_id, $css_class);
+}
+
+function theme_panels_content_custom($title, $body = '', $css_id = NULL, $css_class = NULL) {
+  if (!empty($css_id)) {
+    $css_id = ' id="'. $css_id .'"';
+  }
+  if (!empty($css_class)) {
+    $css_class = ' '. $css_class;
+  }
+  $output = '<div class="panel-custom'. $css_class .'"'. $css_id .'>';
+  if (!empty($title)) {
+    $output .= '<h2 class="title">'. $title .'</h2>';
+  }
+  $output .= $body;
+  $output .= '</div>';
+  return $output;
+}
+/** 
+ * Callback to perform administrative functions on the content block
+ */
+function panels_admin_custom($op, &$arg, $arg2 = NULL) {
+  switch ($op) {
+    case 'list':
+      $conf = $arg;
+      return '<strong>Custom</strong>: '. filter_xss_admin($conf['title']);
+
+    case 'add button':
+      $form['title'] = array(
+        '#title' => t('Enter an optional title for custom content you define'),
+        '#type' => 'textfield',
+        '#maxlength' => 512,
+        '#weight'  => -10,
+      );
+      $form['submit'] = array(
+        '#type' => 'button',
+        '#value' => t('Add custom'),
+      );
+      $form['#prefix'] = '<div class="container-inline">';
+      $form['#suffix'] = '</div>';
+      return $form;
+
+    case 'add':
+      if (isset($_POST['op']) && $_POST['op'] != t('Add custom')) {
+        return;
+      }
+      return $arg;
+
+    case 'edit':
+      $conf = &$arg;
+      $form['title'] = array(
+        '#type' => 'textfield',
+        '#default_value' => $conf['title'],
+        '#title' => t('Title'),
+        '#description' => t('Title'),
+        '#size' => 15,
+      );
+      $form['body'] = array(
+        '#title' => t('Body'),
+        '#type' => 'textarea',
+        '#default_value' => $conf['body'],
+        '#rows' => 10,
+        '#cols' => 20,
+      );
+      $arg2[] = 'format';
+      $form['format'] = filter_form($conf['format'], 1, $arg2);
+
+      $form['css_id'] = array(
+        '#type' => 'textfield',
+        '#default_value' => $conf['css_id'],
+        '#title' => t('CSS ID'),
+        '#description' => t('CSS ID of this custom content.'),
+        '#weight' => 2,
+        '#size' => 15,
+      );
+      $form['css_class'] = array(
+        '#type' => 'textfield',
+        '#default_value' => $conf['css_class'],
+        '#title' => t('CSS class'),
+        '#description' => t('CSS class of this custom content.'),
+        '#weight' => 2,
+        '#size' => 15,
+      );
+      return $form;
+
+    case 'validate':
+      // This one has nothing to validate.
+      $form = &$arg;
+      return;
+
+    case 'save':
+      // For this one, the form values go directly into the config.
+      $form = &$arg;
+      return $form;
+  }
+}
Index: modules/panels/content_types/node.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/panels/content_types/node.inc,v
retrieving revision 1.2.4.2
diff -u -r1.2.4.2 node.inc
--- modules/panels/content_types/node.inc	15 Mar 2007 23:21:16 -0000	1.2.4.2
+++ modules/panels/content_types/node.inc	8 Jan 2008 23:20:01 -0000
@@ -1,110 +1,115 @@
-<?php
-/**
- * Callback function to supply a list of content types.
- */
-function panels_node_panels_content_types() {
-  $items['node'] = array(
-    'callback' => 'panels_content_node',
-    'admin' => 'panels_admin_node',
-  );
-  return $items;
-}
-
-/**
- * Output function for the 'node' content type. Outputs a node
- * based on the module and delta supplied in the configuration.
- */
-function panels_content_node($conf) {
-  $node = node_load($conf['nid']);
-  if (!node_access('view', $node)) {
-    return;
-  }
-
-  if ($conf['suppress_title']) {
-    $node->title = '';
-  }
-
-  $output = node_view($node, $conf['teaser'], FALSE, $conf['links']);
-  return $output;
-}
-
-/** 
- * Callback to perform administrative functions on the content block
- */
-function panels_admin_node($op, &$arg, $arg2 = NULL) {
-  switch ($op) {
-    case 'list':
-      $conf = $arg;
-      $node = node_load($conf['nid']);
-      return '<strong>Node</strong>: ' . check_plain($node->title);
-    case 'add button':
-      $form['nid'] = array(
-        '#title' => t('Enter the title or NID of a post'),
-        '#type' => 'textfield',
-        '#maxlength' => 512,
-        '#autocomplete_path' => 'panels/node/autocomplete',
-        '#weight'  => -10,
-      );
-      $form['submit'] = array(
-        '#type' => 'button',
-        '#value' => t('Add post'),
-      );
-
-      $form['#prefix'] = '<div class="container-inline">';
-      $form['#suffix'] = '</div>';
-      return $form;
-    case 'add':
-      if ($_POST['op'] != t('Add post')) {
-        return;
-      }
-      $form = &$arg;
-      if (is_numeric($form['nid'])) {
-        $conf = array();
-        $conf['nid'] = $form['nid'];
-      }
-      else {
-        $conf = db_fetch_array(db_query(db_rewrite_sql("SELECT n.nid FROM {node} n WHERE LOWER(title) = LOWER('%s')"), $form['nid']));
-        if (!$conf['nid']) {
-          drupal_set_message(t('Unable to find "%s"', array('%s' => check_plain($form['nid']))));
-          return;
-        }
-      }
-      // default to just teaser
-      $conf['teaser'] = TRUE;
-      return $conf;
-    case 'edit':
-      $conf = &$arg;
-      $form['nid'] = array(
-        '#type' => 'hidden',
-        '#default_value' => $conf['nid'],
-      );
-      $form['teaser'] = array(
-        '#title' => t('Teaser'),
-        '#type' => 'checkbox',
-        '#default_value' => $conf['teaser'],
-        '#description' => t('Check here to show only the node teaser'),
-      );
-      $form['links'] = array(
-        '#type' => 'checkbox',
-        '#default_value' => $conf['links'],
-        '#title' => t('Display links'),
-        '#description' => t('Check here to display the links with the post.')
-      );
-       $form['suppress_title'] = array(
-         '#type' => 'checkbox',
-         '#default_value' => $conf['suppress_title'],
-         '#title' => t('Suppress node title'),
-         '#description' => t('Check here to suppress the node title.')
-       );
-
-      return $form;
-    case 'validate':
-      // This one has nothing to validate.
-      $form = &$arg;
-      return;
-    case 'save':
-      // For this one, the form values go directly into the config.
-      $form = &$arg;
-      return $form;
-  }
-}
+<?php
+// $Id: $
+
+/**
+ * Callback function to supply a list of content types.
+ */
+function panels_node_panels_content_types() {
+  $items['node'] = array(
+    'callback' => 'panels_content_node',
+    'admin' => 'panels_admin_node',
+  );
+  return $items;
+}
+
+/**
+ * Output function for the 'node' content type. Outputs a node
+ * based on the module and delta supplied in the configuration.
+ */
+function panels_content_node($conf) {
+  $node = node_load($conf['nid']);
+  if (!node_access('view', $node)) {
+    return;
+  }
+
+  if (!empty($conf['suppress_title'])) {
+    $node->title = '';
+  }
+
+  $output = node_view($node, $conf['teaser'], FALSE, $conf['links']);
+  return $output;
+}
+
+/** 
+ * Callback to perform administrative functions on the content block
+ */
+function panels_admin_node($op, &$arg, $arg2 = NULL) {
+  switch ($op) {
+    case 'list':
+      $conf = $arg;
+      $node = node_load($conf['nid']);
+      return '<strong>Node</strong>: '. check_plain($node->title);
+
+    case 'add button':
+      $form['nid'] = array(
+        '#title' => t('Enter the title or NID of a post'),
+        '#type' => 'textfield',
+        '#maxlength' => 512,
+        '#autocomplete_path' => 'panels/node/autocomplete',
+        '#weight'  => -10,
+      );
+      $form['submit'] = array(
+        '#type' => 'button',
+        '#value' => t('Add post'),
+      );
+      $form['#prefix'] = '<div class="container-inline">';
+      $form['#suffix'] = '</div>';
+      return $form;
+
+    case 'add':
+      if (isset($_POST['op']) && $_POST['op'] != t('Add post')) {
+        return;
+      }
+      $form = &$arg;
+      if (is_numeric($form['nid'])) {
+        $conf = array();
+        $conf['nid'] = $form['nid'];
+      }
+      else {
+        $conf = db_fetch_array(db_query(db_rewrite_sql("SELECT n.nid FROM {node} n WHERE LOWER(title) = LOWER('%s')"), $form['nid']));
+        if (empty($conf['nid'])) {
+          drupal_set_message(t('Unable to find "%s"', array('%s' => check_plain($form['nid']))));
+          return;
+        }
+      }
+      // default to just teaser
+      $conf['teaser'] = TRUE;
+      return $conf;
+
+    case 'edit':
+      $conf = &$arg;
+      $form['nid'] = array(
+        '#type' => 'hidden',
+        '#default_value' => $conf['nid'],
+      );
+      $form['teaser'] = array(
+        '#title' => t('Teaser'),
+        '#type' => 'checkbox',
+        '#default_value' => $conf['teaser'],
+        '#description' => t('Check here to show only the node teaser'),
+      );
+      $form['links'] = array(
+        '#type' => 'checkbox',
+        '#default_value' => $conf['links'],
+        '#title' => t('Display links'),
+        '#description' => t('Check here to display the links with the post.')
+      );
+      $form['suppress_title'] = array(
+         '#type' => 'checkbox',
+         '#default_value' => $conf['suppress_title'],
+         '#title' => t('Suppress node title'),
+         '#description' => t('Check here to suppress the node title.')
+      );
+      return $form;
+
+    case 'validate':
+      // This one has nothing to validate.
+      $form = &$arg;
+      return;
+
+    case 'save':
+      // For this one, the form values go directly into the config.
+      $form = &$arg;
+      return $form;
+  }
+}
Index: modules/panels/content_types/block.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/panels/content_types/block.inc,v
retrieving revision 1.1.4.2
diff -u -r1.1.4.2 block.inc
--- modules/panels/content_types/block.inc	17 Mar 2007 00:56:33 -0000	1.1.4.2
+++ modules/panels/content_types/block.inc	8 Jan 2008 23:20:00 -0000
@@ -1,128 +1,142 @@
-<?php
-/**
- * Callback function to supply a list of content types.
- */
-function panels_block_panels_content_types() {
-  $items['block'] = array(
-    'callback' => 'panels_content_block',
-    'admin' => 'panels_admin_block',
-  );
-  return $items;
-}
-
-/**
- * Output function for the 'block' content type. Outputs a block
- * based on the module and delta supplied in the configuration.
- */
-function panels_content_block($conf) {
-  $block = (object) module_invoke($conf['module'], 'block', 'view', $conf['delta']);
-  $block->module = $conf['module'];
-  $block->delta = $conf['delta'];
-  if ($conf['override_title']) {
-    $block->subject = check_plain($conf['override_title_text']);
-  }
-
-  // Test for block visibility
-  $result = db_query("SELECT pages, visibility FROM {blocks} WHERE module = '%s' AND delta = %d", $block->module, $block->delta);
-  $block_visibility = db_fetch_object($result);
-
-  if ($block_visibility && $block_visibility->pages) {
-    if ($block_visibility->visibility < 2) {
-      $path = drupal_get_path_alias($_GET['q']);
-      $regexp = '/^('. preg_replace(array('/(\r\n?|\n)/', '/\\\\\*/', '/(^|\|)\\\\<front\\\\>($|\|)/'), array('|', '.*', '\1'. preg_quote(variable_get('site_frontpage', 'node'), '/') .'\2'), preg_quote($block->pages, '/')) .')$/';
-      $page_match = !($block->visibility xor preg_match($regexp, $path));
-    } else {
-      $page_match = drupal_eval($block->pages);
-    }
-  } else {
-    $page_match = TRUE;
-  }
-
-  if ($page_match) {
-    return theme('block', $block);
-  }
-}
-
-/** 
- * Callback to perform administrative functions on the content block
- */
-function panels_admin_block($op, &$arg, $arg2 = NULL) {
-  switch ($op) {
-    case 'list':
-      $conf = $arg;
-      $block = module_invoke($conf['module'], 'block', 'list');
-      $title = $block[$conf['delta']]['info'];
-      if ($conf['override_title']) {
-        $title .= ' [' . check_plain($conf['override_title_text']) . ']';
-      }
-      return '<strong>Block</strong>: ' . $title . ' (' . $conf['module'] . '-' . $conf['delta'] . ')';
-    case 'add button':
-      foreach (module_list() as $module) {
-        $module_blocks = module_invoke($module, 'block', 'list');
-        if ($module_blocks) {
-          $array = array();
-          foreach ($module_blocks as $delta => $block) {
-            // strip_tags used because it goes through check_plain and that
-            // just looks bad.
-            $array["$module-$delta"] = strip_tags($block['info']);
-          }
-          $options[$module] = $array;
-        }
-      }
-      $form['block'] = array(
-        '#type' => 'select',
-        '#options' => $options,
-        '#title' => t('Block'),
-      );
-      $form['submit'] = array(
-        '#type' => 'button',
-        '#value' => t('Add block'),
-      );
-
-      $form['#prefix'] = '<div class="container-inline">';
-      $form['#suffix'] = '</div>';
-      return $form;
-    case 'add':
-      if ($_POST['op'] != t('Add block')) {
-        return;
-      }
-      $form = &$arg;
-      $conf = array();
-      list($conf['module'], $conf['delta']) = explode('-', $form['block'], 2);
-      // take the data given to us and return a fully formed $area object.
-      return $conf;
-    case 'edit':
-      $conf = &$arg;
-      $form['module'] = array(
-        '#type' => 'hidden',
-        '#default_value' => $conf['module'],
-      );
-      $form['delta'] = array(
-        '#type' => 'hidden',
-        '#default_value' => $conf['delta'],
-      );
-      $form['override_title'] = array(
-        '#type' => 'checkbox',
-        '#default_value' => $conf['override_title'],
-        '#title' => t('Override title'),
-        '#description' => t('If checked, the block title will be overridden with the override title text.')
-      );
-      $form['override_title_text'] = array(
-        '#type' => 'textfield',
-        '#default_value' => $conf['override_title_text'],
-        '#title' => t('Override title text'),
-        '#size' => 15,
-      );
-
-      return $form;
-    case 'validate':
-      // This one has nothing to validate.
-      $form_values = &$arg;
-      $form = $arg2;
-      return;
-    case 'save':
-      // For this one, the form values go directly into the config.
-      $form = &$arg;
-      return $form;
-  }
-}
+<?php
+// $Id: $
+
+/**
+ * Callback function to supply a list of content types.
+ */
+function panels_block_panels_content_types() {
+  $items['block'] = array(
+    'callback' => 'panels_content_block',
+    'admin' => 'panels_admin_block',
+  );
+  return $items;
+}
+
+/**
+ * Output function for the 'block' content type. Outputs a block
+ * based on the module and delta supplied in the configuration.
+ */
+function panels_content_block($conf) {
+  $block = (object) module_invoke($conf['module'], 'block', 'view', $conf['delta']);
+  $block->module = $conf['module'];
+  $block->delta = $conf['delta'];
+  if (!empty($conf['override_title'])) {
+    $block->subject = check_plain($conf['override_title_text']);
+  }
+
+  // Test for block visibility
+  $result = db_query("SELECT pages, visibility FROM {blocks} WHERE module = '%s' AND delta = %d", $block->module, $block->delta);
+  $block_visibility = db_fetch_object($result);
+
+  if ($block_visibility && $block_visibility->pages) {
+    if ($block_visibility->visibility < 2) {
+      $path = drupal_get_path_alias($_GET['q']);
+      $regexp = '/^('. preg_replace(array('/(\r\n?|\n)/', '/\\\\\*/', '/(^|\|)\\\\<front\\\\>($|\|)/'), array('|', '.*', '\1'. preg_quote(variable_get('site_frontpage', 'node'), '/') .'\2'), preg_quote($block->pages, '/')) .')$/';
+      $page_match = !($block->visibility xor preg_match($regexp, $path));
+    }
+    else {
+      $page_match = drupal_eval($block->pages);
+    }
+  }
+  else {
+    $page_match = TRUE;
+  }
+
+  if ($page_match) {
+    return theme('block', $block);
+  }
+}
+
+/** 
+ * Callback to perform administrative functions on the content block
+ */
+function panels_admin_block($op, &$arg, $arg2 = NULL) {
+  switch ($op) {
+    case 'list':
+      $conf = $arg;
+      $block = module_invoke($conf['module'], 'block', 'list');
+      $title = $block[$conf['delta']]['info'];
+      if (!empty($conf['override_title'])) {
+        $title .= ' ['. check_plain($conf['override_title_text']) .']';
+      }
+      return '<strong>Block</strong>: '. $title .' ('. $conf['module'] .'-'. $conf['delta'] .')';
+
+    case 'add button':
+      foreach (module_list() as $module) {
+        $module_blocks = module_invoke($module, 'block', 'list');
+        if ($module_blocks) {
+          $array = array();
+          foreach ($module_blocks as $delta => $block) {
+            // strip_tags used because it goes through check_plain and that
+            // just looks bad.
+            $array["$module-$delta"] = strip_tags($block['info']);
+          }
+          $options[$module] = $array;
+        }
+      }
+      $form['block'] = array(
+        '#type' => 'select',
+        '#options' => $options,
+        '#title' => t('Block'),
+      );
+      $form['submit'] = array(
+        '#type' => 'button',
+        '#value' => t('Add block'),
+      );
+
+      $form['#prefix'] = '<div class="container-inline">';
+      $form['#suffix'] = '</div>';
+      return $form;
+
+    case 'add':
+      if (isset($_POST['op']) && $_POST['op'] != t('Add block')) {
+        return;
+      }
+      // $form = &$arg;
+      $form = $arg;
+      $conf = array();
+      if (!empty($form['block'])) {
+        list($conf['module'], $conf['delta']) = explode('-', $form['block'], 2);
+      }
+      // take the data given to us and return a fully formed $area object.
+      return $conf;
+
+    case 'edit':
+      // $conf = &$arg;
+      $conf = $arg;
+      $form['module'] = array(
+        '#type' => 'hidden',
+        '#default_value' => $conf['module'],
+      );
+      $form['delta'] = array(
+        '#type' => 'hidden',
+        '#default_value' => $conf['delta'],
+      );
+      $form['override_title'] = array(
+        '#type' => 'checkbox',
+        '#default_value' => $conf['override_title'],
+        '#title' => t('Override title'),
+        '#description' => t('If checked, the block title will be overridden with the override title text.')
+      );
+      $form['override_title_text'] = array(
+        '#type' => 'textfield',
+        '#default_value' => $conf['override_title_text'],
+        '#title' => t('Override title text'),
+        '#size' => 15,
+      );
+
+      return $form;
+
+    case 'validate':
+      // This one has nothing to validate.
+      $form_values = &$arg;
+      $form = $arg2;
+      return;
+
+    case 'save':
+      // For this one, the form values go directly into the config.
+      // $form = &$arg;
+      $form = $arg;
+      return $form;
+  }
+}
Index: modules/panels/content_types/views.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/panels/content_types/views.inc,v
retrieving revision 1.4.2.4
diff -u -r1.4.2.4 views.inc
--- modules/panels/content_types/views.inc	15 Mar 2007 23:29:31 -0000	1.4.2.4
+++ modules/panels/content_types/views.inc	8 Jan 2008 23:20:01 -0000
@@ -1,177 +1,183 @@
-<?php
-// Only valid if views module loaded.
-if (module_exists('views')) {
-  /**
-   * Callback function to supply a list of content types.
-   */
-  function panels_views_panels_content_types() {
-    $items['views'] = array(
-      'callback' => 'panels_content_views',
-      'admin' => 'panels_admin_views',
-    );
-    return $items;
-  }
-
-  /**
-   * Output function for the 'views' content type. Outputs a views
-   * based on the module and delta supplied in the configuration.
-   */
-  function panels_content_views($conf) {
-    $view = views_get_view($conf['view']);
-    if ($view) {
-      if (function_exists('views_access') && !views_access($view)) {
-        return NULL;
-      }
-
-      $arguments = explode('/', $_GET['q']);
-      $args = $conf['args'];
-      
-      foreach ($arguments as $id => $arg) {
-        $args = str_replace("%$id", $arg, $args);
-      }
-
-      $args = preg_replace('/\\/%\d/', '', $args);
-      $args = $args ? explode('/', $args) : array();
-
-      if ($conf['url']) {
-        $view->url = $conf['url'];
-      }
-
-       $content = views_build_view($conf['type'], $view, $args, intval($conf['pager_id']), intval($conf['nodes_per_page']));
- 
-       $title = $conf['show_title'] ? views_get_title($view, $conf['type']) : NULL;
-       $output = theme('panels_content_views', $content, $title);
-    }
-    return $output;
-  }
-
-  function theme_panels_content_views($content, $title) {
-    if ($title) {
-      $output .= '<h2 class="title">' . $title . '</h2>';
-    }
-    $output .= $content;
-    return $output;
-  }
- 
-  /** 
-   * Callback to perform administrative functions on the content views
-   */
-  function panels_admin_views($op, &$arg, $arg2 = NULL) {
-    switch ($op) {
-      case 'list':
-        $conf = $arg;
-        $view = views_get_view($conf['view']);
-        return '<strong>Views</strong>: ' . $view->name . ' (' . $view->description . ')';
-      case 'add button':
-        $result = db_query("SELECT name, description FROM {view_view}");
-        while ($view = db_fetch_object($result)) {
-          $views[$view->name] = $view->name . ': ' . $view->description;
-        }
-
-        views_load_cache();
-        $default_views = _views_get_default_views();
-        $views_status = variable_get('views_defaults', array());
-        foreach ($default_views as $view) {
-          if (!$views[$view->name] && 
-            ($views_status[$view->name] == 'enabled' || (!$views_status[$view->name] && !$view->disabled))) {
-            $views[$view->name] = check_plain($view->name . ': ' . $view->description);
-          }
-        }
-
-        ksort($views);
-
-        $form['view'] = array(
-          '#type' => 'select',
-          '#options' => $views,
-          '#title' => t('Choose a view from the views module'),
-        );
-        $form['submit'] = array(
-          '#type' => 'button',
-          '#value' => t('Add view'),
-        );
-
-        $form['#prefix'] = '<div class="container-inline">';
-        $form['#suffix'] = '</div>';
-        return $form;
-      case 'add':
-        if ($_POST['op'] != t('Add view')) {
-          return;
-        }
-        $conf = $arg;
-        $view = views_get_view($conf['view']);
-        if ($view->page) {
-          $conf['type'] = 'page';
-          $conf['nodes_per_page'] = $view->nodes_per_page;
-        }
-        else {
-          $conf['type'] = 'block';
-          $conf['nodes_per_page'] = $view->nodes_per_block;
-        }
-        $conf['pager_id'] = 0;
-        return $conf;
-      case 'edit':
-        $conf = &$arg;
-        $form['view'] = array(
-          '#type' => 'hidden',
-          '#default_value' => $conf['view'],
-        );
-        $form['type'] = array(
-          '#type' => 'select',
-          '#default_value' => $conf['type'],
-          '#title' => t('View type'),
-          '#description' => t('Select which type of the view to display.'),
-          '#options' => array('page' => t('Page'), 'block' => t('Block'), 'embed' => t('Embedded')),
-        );
-        $form['pager_id'] = array(
-          '#type' => 'textfield',
-          '#default_value' => $conf['pager_id'],
-          '#title' => t('Pager ID'),
-          '#size' => 4,
-          '#description' => t('Select the numeric pager ID to use, or 0 to not have use paging. Select "1" if you aren\'t sure what this means'),
-        );
-
-        $form['nodes_per_page'] = array(
-          '#type' => 'textfield',
-          '#default_value' => $conf['nodes_per_page'],
-          '#title' => t('Posts to Display'),
-          '#size' => 4,
-          '#description' => t('Select the number of posts to display, or 0 to display all results.'),
-        );
-
-        $form['args'] = array(
-          '#type' => 'textfield',
-          '#default_value' => $conf['args'],
-          '#title' => t('View arguments'),
-          '#size' => 12,
-          '#description' => t('Arguments to send to the view as if they were part of the URL in the form of arg1/arg2/arg3. You can use %0, %1, %2, etc, to use arguments from the actual URL. For example, if your panel URL is foo/bar, and someone hits foo/bar/5 use %2 to get the 5.'),
-        );
-
-        $form['url'] = array(
-          '#type' => 'textfield',
-          '#default_value' => $conf['url'],
-          '#title' => t('Override URL'),
-          '#size' => 12,
-          '#description' => t('If this is set, override the View URL; this can sometimes be useful to set to the panel URL'),
-        );
-
-         $form['show_title'] = array(
-           '#type' => 'checkbox',
-           '#default_value' => $conf['show_title'],
-           '#title' => t('Display view title'),
-           '#description' => t('If checked, the title of the view will be displayed.'),
-         );
- 
-        return $form;
-      case 'validate':
-        // This one has nothing to validate.
-        $form_values = &$arg;
-        $form = $arg2;
-        return;
-      case 'save':
-        // For this one, the form values go directly into the config.
-        $form = &$arg;
-        return $form;
-    }
-  }
-
-}
+<?php
+// $Id: $
+
+// Only valid if views module loaded.
+if (module_exists('views')) {
+  /**
+   * Callback function to supply a list of content types.
+   */
+  function panels_views_panels_content_types() {
+    $items['views'] = array(
+      'callback' => 'panels_content_views',
+      'admin' => 'panels_admin_views',
+    );
+    return $items;
+  }
+
+  /**
+   * Output function for the 'views' content type. Outputs a views
+   * based on the module and delta supplied in the configuration.
+   */
+  function panels_content_views($conf) {
+    $view = views_get_view($conf['view']);
+    if (!empty($view)) {
+      if (function_exists('views_access') && !views_access($view)) {
+        return NULL;
+      }
+
+      $arguments = explode('/', $_GET['q']);
+      $args = $conf['args'];
+      
+      foreach ($arguments as $id => $arg) {
+        $args = str_replace("%$id", $arg, $args);
+      }
+
+      $args = preg_replace('/\\/%\d/', '', $args);
+      $args = $args ? explode('/', $args) : array();
+
+      if (!empty($conf['url'])) {
+        $view->url = $conf['url'];
+      }
+
+      $content = views_build_view($conf['type'], $view, $args, intval($conf['pager_id']), intval($conf['nodes_per_page']));
+ 
+      $title = $conf['show_title'] ? views_get_title($view, $conf['type']) : NULL;
+      $output = theme('panels_content_views', $content, $title);
+    }
+    return $output;
+  }
+
+  function theme_panels_content_views($content, $title) {
+    $output = '';
+    if (!empty($title)) {
+      $output .= '<h2 class="title">'. $title .'</h2>';
+    }
+    $output .= $content;
+    return $output;
+  }
+ 
+  /** 
+   * Callback to perform administrative functions on the content views
+   */
+  function panels_admin_views($op, &$arg, $arg2 = NULL) {
+    switch ($op) {
+      case 'list':
+        $conf = $arg;
+        $view = views_get_view($conf['view']);
+        return '<strong>Views</strong>: '. $view->name .' ('. $view->description .')';
+
+      case 'add button':
+        $result = db_query("SELECT name, description FROM {view_view}");
+        while ($view = db_fetch_object($result)) {
+          $views[$view->name] = $view->name .': '. $view->description;
+        }
+
+        views_load_cache();
+        $default_views = _views_get_default_views();
+        $views_status = variable_get('views_defaults', array());
+        foreach ($default_views as $view) {
+          if (!$views[$view->name] && 
+            ($views_status[$view->name] == 'enabled' || (!$views_status[$view->name] && !$view->disabled))) {
+            $views[$view->name] = check_plain($view->name .': '. $view->description);
+          }
+        }
+
+        ksort($views);
+
+        $form['view'] = array(
+          '#type' => 'select',
+          '#options' => $views,
+          '#title' => t('Choose a view from the views module'),
+        );
+        $form['submit'] = array(
+          '#type' => 'button',
+          '#value' => t('Add view'),
+        );
+        $form['#prefix'] = '<div class="container-inline">';
+        $form['#suffix'] = '</div>';
+        return $form;
+
+      case 'add':
+        if (isset($_POST['op']) && $_POST['op'] != t('Add view')) {
+          return;
+        }
+        $conf = $arg;
+        $view = views_get_view($conf['view']);
+        if ($view->page) {
+          $conf['type'] = 'page';
+          $conf['nodes_per_page'] = $view->nodes_per_page;
+        }
+        else {
+          $conf['type'] = 'block';
+          $conf['nodes_per_page'] = $view->nodes_per_block;
+        }
+        $conf['pager_id'] = 0;
+        return $conf;
+
+      case 'edit':
+        $conf = &$arg;
+        $form['view'] = array(
+          '#type' => 'hidden',
+          '#default_value' => $conf['view'],
+        );
+        $form['type'] = array(
+          '#type' => 'select',
+          '#default_value' => $conf['type'],
+          '#title' => t('View type'),
+          '#description' => t('Select which type of the view to display.'),
+          '#options' => array(
+            'page' => t('Page'),
+            'block' => t('Block'),
+            'embed' => t('Embedded')
+          ),
+        );
+        $form['pager_id'] = array(
+          '#type' => 'textfield',
+          '#default_value' => $conf['pager_id'],
+          '#title' => t('Pager ID'),
+          '#size' => 4,
+          '#description' => t('Select the numeric pager ID to use, or 0 to not have use paging. Select "1" if you aren\'t sure what this means'),
+        );
+        $form['nodes_per_page'] = array(
+          '#type' => 'textfield',
+          '#default_value' => $conf['nodes_per_page'],
+          '#title' => t('Posts to Display'),
+          '#size' => 4,
+          '#description' => t('Select the number of posts to display, or 0 to display all results.'),
+        );
+        $form['args'] = array(
+          '#type' => 'textfield',
+          '#default_value' => $conf['args'],
+          '#title' => t('View arguments'),
+          '#size' => 12,
+          '#description' => t('Arguments to send to the view as if they were part of the URL in the form of arg1/arg2/arg3. You can use %0, %1, %2, etc, to use arguments from the actual URL. For example, if your panel URL is foo/bar, and someone hits foo/bar/5 use %2 to get the 5.'),
+        );
+        $form['url'] = array(
+          '#type' => 'textfield',
+          '#default_value' => $conf['url'],
+          '#title' => t('Override URL'),
+          '#size' => 12,
+          '#description' => t('If this is set, override the View URL; this can sometimes be useful to set to the panel URL'),
+        );
+        $form['show_title'] = array(
+         '#type' => 'checkbox',
+         '#default_value' => $conf['show_title'],
+         '#title' => t('Display view title'),
+         '#description' => t('If checked, the title of the view will be displayed.'),
+        );
+        return $form;
+
+      case 'validate':
+        // This one has nothing to validate.
+        $form_values = &$arg;
+        $form = $arg2;
+        return;
+
+      case 'save':
+        // For this one, the form values go directly into the config.
+        $form = &$arg;
+        return $form;
+    }
+  }
+
+}
Index: modules/panels/layouts/threecol_25_50_25.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/panels/layouts/threecol_25_50_25.inc,v
retrieving revision 1.4
diff -u -r1.4 threecol_25_50_25.inc
--- modules/panels/layouts/threecol_25_50_25.inc	22 Aug 2006 23:54:20 -0000	1.4
+++ modules/panels/layouts/threecol_25_50_25.inc	8 Jan 2008 23:20:05 -0000
@@ -1,44 +1,47 @@
-<?php
-/**
- * implementation of hook_panels_layouts
- */
-function panels_threecol_25_50_25_panels_layouts() {
-  $items['threecol_25_50_25'] = array(
-    'module' => 'panels',
-    'title' => t('Three column 25/50/25'),
-    'icon' => 'layouts/threecol_25_50_25.png',
-    'theme' => 'panels_threecol_25_50_25',
-    'css' => 'layouts/threecol_25_50_25.css',
-    'content areas' => array('left' => t('Left side'), 'middle' => t('Middle column'), 'right' => t('Right side')),
-  );
-
-  return $items;
-}
-
-/**
- * This function uses heredoc notation to make it easier to convert
- * to a template.
- */
-function theme_panels_threecol_25_50_25($id, $content) {
-  if ($id) {
-    $idstr = " id='$id'";
-  }
-
-  $output = <<<EOT
-<div class="panel-3col" $idstr>
-  <div class="panel-col-first">
-    <div>$content[left]</div>
-  </div>
-
-  <div class="panel-col">
-    <div>$content[middle]</div>
-  </div>
-
-  <div class="panel-col-last">
-    <div>$content[right]</div>
-  </div>
-</div>
-<br class="panel-clearer" />
-EOT;
-  return $output;
-}
+<?php
+// $Id: threecol_25_50_25_stacked.inc,v 1.5 2006/08/22 23:54:20 merlinofchaos Exp $
+
+/**
+ * implementation of hook_panels_layouts
+ */
+function panels_threecol_25_50_25_panels_layouts() {
+  $items['threecol_25_50_25'] = array(
+    'module' => 'panels',
+    'title' => t('Three column 25/50/25'),
+    'icon' => 'layouts/threecol_25_50_25.png',
+    'theme' => 'panels_threecol_25_50_25',
+    'css' => 'layouts/threecol_25_50_25.css',
+    'content areas' => array('left' => t('Left side'), 'middle' => t('Middle column'), 'right' => t('Right side')),
+  );
+
+  return $items;
+}
+
+/**
+ * This function uses heredoc notation to make it easier to convert
+ * to a template.
+ */
+function theme_panels_threecol_25_50_25($id, $content) {
+  $idstr = '';
+  if (!empty($id)) {
+    $idstr = " id='$id'";
+  }
+
+  $output = <<<EOT
+<div class="panel-3col" $idstr>
+  <div class="panel-col-first">
+    <div>$content[left]</div>
+  </div>
+
+  <div class="panel-col">
+    <div>$content[middle]</div>
+  </div>
+
+  <div class="panel-col-last">
+    <div>$content[right]</div>
+  </div>
+</div>
+<br class="panel-clearer" />
+EOT;
+  return $output;
+}
Index: modules/panels/layouts/threecol_33_34_33_stacked.css
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/panels/layouts/threecol_33_34_33_stacked.css,v
retrieving revision 1.4
diff -u -r1.4 threecol_33_34_33_stacked.css
--- modules/panels/layouts/threecol_33_34_33_stacked.css	22 Aug 2006 23:54:20 -0000	1.4
+++ modules/panels/layouts/threecol_33_34_33_stacked.css	8 Jan 2008 23:20:05 -0000
@@ -1,29 +1,29 @@
-/* $Id: threecol_33_34_33_stacked.css,v 1.4 2006/08/22 23:54:20 merlinofchaos Exp $ */
-
-.panel-3col-33-stacked { 
-  /* border: 1px solid red; */ 
-  overflow: hidden; 
-}
-.panel-3col-33-stacked div div { 
-  margin: .5em;
-}
-.panel-3col-33-stacked .panel-col-top,
-.panel-3col-33-stacked .panel-col-bottom { 
-  width: 100%; 
-  clear: both;
-}
-.panel-3col-33-stacked .panel-col-first { 
-  float: left; 
-  width: 33%; 
-}
-.panel-3col-33-stacked .panel-col { 
-  float: left; 
-  width: 34%; 
-}
-.panel-3col-33-stacked .panel-col-last { 
-  float: left; 
-  width: 33%; 
-}
-.panel-clearer {
-  clear: both;
-}
+/* $Id: threecol_33_34_33_stacked.css,v 1.4 2006/08/22 23:54:20 merlinofchaos Exp $ */
+
+.panel-3col-33-stacked { 
+  /* border: 1px solid red; */ 
+  overflow: hidden; 
+}
+.panel-3col-33-stacked div div { 
+  margin: .5em;
+}
+.panel-3col-33-stacked .panel-col-top,
+.panel-3col-33-stacked .panel-col-bottom { 
+  width: 100%; 
+  clear: both;
+}
+.panel-3col-33-stacked .panel-col-first { 
+  float: left; 
+  width: 33%; 
+}
+.panel-3col-33-stacked .panel-col { 
+  float: left; 
+  width: 34%; 
+}
+.panel-3col-33-stacked .panel-col-last { 
+  float: left; 
+  width: 33%; 
+}
+.panel-clearer {
+  clear: both;
+}
Index: modules/panels/layouts/threecol_33_34_33_stacked.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/panels/layouts/threecol_33_34_33_stacked.inc,v
retrieving revision 1.5
diff -u -r1.5 threecol_33_34_33_stacked.inc
--- modules/panels/layouts/threecol_33_34_33_stacked.inc	22 Aug 2006 23:54:20 -0000	1.5
+++ modules/panels/layouts/threecol_33_34_33_stacked.inc	8 Jan 2008 23:20:05 -0000
@@ -1,52 +1,53 @@
-<?php
-// $Id: threecol_33_34_33_stacked.inc,v 1.5 2006/08/22 23:54:20 merlinofchaos Exp $
-
-/**
- * implementation of hook_panels_layouts
- */
-function panels_threecol_33_34_33_stacked_panels_layouts() {
-  $items['threecol_33_34_33_stacked'] = array(
-    'module' => 'panels',
-    'title' => t('Three column 33/34/33 stacked'),
-    'icon' => 'layouts/threecol_33_34_33_stacked.png',
-    'theme' => 'panels_threecol_33_34_33_stacked',
-    'css' => 'layouts/threecol_33_34_33_stacked.css',
-    'content areas' => array('top' => t('Top'), 'left' => t('Left side'), 'middle' => t('Middle column'), 'right' => t('Right side'), 'bottom' => t('Bottom')),
-  );
-
-  return $items;
-}
-
-/**
- * This function uses heredoc notation to make it easier to convert
- * to a template.
- */
-function theme_panels_threecol_33_34_33_stacked($id, $content) {
-  if ($id) {
-    $idstr = " id='$id'";
-  }
-
-  $output = <<<EOT
-<div class="panel-3col-33-stacked" $idstr>
-  <div class="panel-col-top">
-    <div>$content[top]</div>
-  </div>
-  <div class="panel-col-first">
-    <div>$content[left]</div>
-  </div>
-
-  <div class="panel-col">
-    <div>$content[middle]</div>
-  </div>
-
-  <div class="panel-col-last">
-    <div>$content[right]</div>
-  </div>
-  <div class="panel-col-bottom">
-    <div>$content[bottom]</div>
-  </div>
-</div>
-<br class="panel-clearer" />
-EOT;
-  return $output;
-}
+<?php
+// $Id: threecol_33_34_33_stacked.inc,v 1.5 2006/08/22 23:54:20 merlinofchaos Exp $
+
+/**
+ * implementation of hook_panels_layouts
+ */
+function panels_threecol_33_34_33_stacked_panels_layouts() {
+  $items['threecol_33_34_33_stacked'] = array(
+    'module' => 'panels',
+    'title' => t('Three column 33/34/33 stacked'),
+    'icon' => 'layouts/threecol_33_34_33_stacked.png',
+    'theme' => 'panels_threecol_33_34_33_stacked',
+    'css' => 'layouts/threecol_33_34_33_stacked.css',
+    'content areas' => array('top' => t('Top'), 'left' => t('Left side'), 'middle' => t('Middle column'), 'right' => t('Right side'), 'bottom' => t('Bottom')),
+  );
+
+  return $items;
+}
+
+/**
+ * This function uses heredoc notation to make it easier to convert
+ * to a template.
+ */
+function theme_panels_threecol_33_34_33_stacked($id, $content) {
+  $idstr = '';
+  if (!empty($id)) {
+    $idstr = " id='$id'";
+  }
+
+  $output = <<<EOT
+<div class="panel-3col-33-stacked" $idstr>
+  <div class="panel-col-top">
+    <div>$content[top]</div>
+  </div>
+  <div class="panel-col-first">
+    <div>$content[left]</div>
+  </div>
+
+  <div class="panel-col">
+    <div>$content[middle]</div>
+  </div>
+
+  <div class="panel-col-last">
+    <div>$content[right]</div>
+  </div>
+  <div class="panel-col-bottom">
+    <div>$content[bottom]</div>
+  </div>
+</div>
+<br class="panel-clearer" />
+EOT;
+  return $output;
+}
Index: modules/panels/layouts/threecol_25_50_25.css
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/panels/layouts/threecol_25_50_25.css,v
retrieving revision 1.3
diff -u -r1.3 threecol_25_50_25.css
--- modules/panels/layouts/threecol_25_50_25.css	22 Aug 2006 23:54:20 -0000	1.3
+++ modules/panels/layouts/threecol_25_50_25.css	8 Jan 2008 23:20:05 -0000
@@ -1,22 +1,22 @@
-.panel-3col { 
-  /* border: 1px solid red; */ 
-  overflow: hidden; 
-}
-.panel-3col div div { 
-  margin: .5em;
-}
-.panel-3col .panel-col-first { 
-  float: left; 
-  width: 25%; 
-}
-.panel-3col .panel-col { 
-  float: left; 
-  width: 50%; 
-}
-.panel-3col .panel-col-last { 
-  float: left; 
-  width: 25%; 
-}
-.panel-clearer {
-  clear: both;
-}
+.panel-3col { 
+  /* border: 1px solid red; */ 
+  overflow: hidden; 
+}
+.panel-3col div div { 
+  margin: .5em;
+}
+.panel-3col .panel-col-first { 
+  float: left; 
+  width: 25%; 
+}
+.panel-3col .panel-col { 
+  float: left; 
+  width: 50%; 
+}
+.panel-3col .panel-col-last { 
+  float: left; 
+  width: 25%; 
+}
+.panel-clearer {
+  clear: both;
+}
Index: modules/panels/layouts/threecol_25_50_25_stacked.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/panels/layouts/threecol_25_50_25_stacked.inc,v
retrieving revision 1.5
diff -u -r1.5 threecol_25_50_25_stacked.inc
--- modules/panels/layouts/threecol_25_50_25_stacked.inc	22 Aug 2006 23:54:20 -0000	1.5
+++ modules/panels/layouts/threecol_25_50_25_stacked.inc	8 Jan 2008 23:20:05 -0000
@@ -1,52 +1,53 @@
-<?php
-// $Id: threecol_25_50_25_stacked.inc,v 1.5 2006/08/22 23:54:20 merlinofchaos Exp $
-
-/**
- * implementation of hook_panels_layouts
- */
-function panels_threecol_25_50_25_stacked_panels_layouts() {
-  $items['threecol_25_50_25_stacked'] = array(
-    'module' => 'panels',
-    'title' => t('Three column 25/50/25 stacked'),
-    'icon' => 'layouts/threecol_25_50_25_stacked.png',
-    'theme' => 'panels_threecol_25_50_25_stacked',
-    'css' => 'layouts/threecol_25_50_25_stacked.css',
-    'content areas' => array('top' => t('Top'), 'left' => t('Left side'), 'middle' => t('Middle column'), 'right' => t('Right side'), 'bottom' => t('Bottom')),
-  );
-
-  return $items;
-}
-
-/**
- * This function uses heredoc notation to make it easier to convert
- * to a template.
- */
-function theme_panels_threecol_25_50_25_stacked($id, $content) {
-  if ($id) {
-    $idstr = " id='$id'";
-  }
-
-  $output = <<<EOT
-<div class="panel-3col-stacked" $idstr>
-  <div class="panel-col-top">
-    <div>$content[top]</div>
-  </div>
-  <div class="panel-col-first">
-    <div>$content[left]</div>
-  </div>
-
-  <div class="panel-col">
-    <div>$content[middle]</div>
-  </div>
-
-  <div class="panel-col-last">
-    <div>$content[right]</div>
-  </div>
-  <div class="panel-col-bottom">
-    <div>$content[bottom]</div>
-  </div>
-</div>
-<br class="panel-clearer" />
-EOT;
-  return $output;
-}
+<?php
+// $Id: $
+
+/**
+ * implementation of hook_panels_layouts
+ */
+function panels_threecol_25_50_25_stacked_panels_layouts() {
+  $items['threecol_25_50_25_stacked'] = array(
+    'module' => 'panels',
+    'title' => t('Three column 25/50/25 stacked'),
+    'icon' => 'layouts/threecol_25_50_25_stacked.png',
+    'theme' => 'panels_threecol_25_50_25_stacked',
+    'css' => 'layouts/threecol_25_50_25_stacked.css',
+    'content areas' => array('top' => t('Top'), 'left' => t('Left side'), 'middle' => t('Middle column'), 'right' => t('Right side'), 'bottom' => t('Bottom')),
+  );
+
+  return $items;
+}
+
+/**
+ * This function uses heredoc notation to make it easier to convert
+ * to a template.
+ */
+function theme_panels_threecol_25_50_25_stacked($id, $content) {
+  $idstr = '';
+  if (!empty($id)) {
+    $idstr = " id='$id'";
+  }
+
+  $output = <<<EOT
+<div class="panel-3col-stacked" $idstr>
+  <div class="panel-col-top">
+    <div>$content[top]</div>
+  </div>
+  <div class="panel-col-first">
+    <div>$content[left]</div>
+  </div>
+
+  <div class="panel-col">
+    <div>$content[middle]</div>
+  </div>
+
+  <div class="panel-col-last">
+    <div>$content[right]</div>
+  </div>
+  <div class="panel-col-bottom">
+    <div>$content[bottom]</div>
+  </div>
+</div>
+<br class="panel-clearer" />
+EOT;
+  return $output;
+}
Index: modules/panels/layouts/twocol_stacked.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/panels/layouts/twocol_stacked.inc,v
retrieving revision 1.5
diff -u -r1.5 twocol_stacked.inc
--- modules/panels/layouts/twocol_stacked.inc	22 Aug 2006 23:54:20 -0000	1.5
+++ modules/panels/layouts/twocol_stacked.inc	8 Jan 2008 23:20:05 -0000
@@ -1,48 +1,49 @@
-<?php
-// $Id: twocol_stacked.inc,v 1.5 2006/08/22 23:54:20 merlinofchaos Exp $
-
-/**
- * implementation of hook_panels_layouts
- */
-function panels_twocol_stacked_panels_layouts() {
-  $items['twocol_stacked'] = array(
-    'module' => 'panels',
-    'title' => t('Two column stacked'),
-    'icon' => 'layouts/twocol_stacked.png',
-    'theme' => 'panels_twocol_stacked',
-    'css' => 'layouts/twocol_stacked.css',
-    'content areas' => array('top' => t('Top'), 'left' => t('Left side'), 'right' => t('Right side'), 'bottom' => t('Bottom')),
-  );
-
-  return $items;
-}
-
-/**
- * This function uses heredoc notation to make it easier to convert
- * to a template.
- */
-function theme_panels_twocol_stacked($id, $content) {
-  if ($id) {
-    $idstr = " id='$id'";
-  }
-
-  $output = <<<EOT
-<div class="panel-2col-stacked" $idstr>
-  <div class="panel-col-top">
-    <div>$content[top]</div>
-  </div>
-  <div class="panel-col-first">
-    <div>$content[left]</div>
-  </div>
-
-  <div class="panel-col-last">
-    <div>$content[right]</div>
-  </div>
-  <div class="panel-col-bottom">
-    <div>$content[bottom]</div>
-  </div>
-</div>
-<br class="panel-clearer" />
-EOT;
-  return $output;
-}
+<?php
+// $Id: twocol_stacked.inc,v 1.5 2006/08/22 23:54:20 merlinofchaos Exp $
+
+/**
+ * implementation of hook_panels_layouts
+ */
+function panels_twocol_stacked_panels_layouts() {
+  $items['twocol_stacked'] = array(
+    'module' => 'panels',
+    'title' => t('Two column stacked'),
+    'icon' => 'layouts/twocol_stacked.png',
+    'theme' => 'panels_twocol_stacked',
+    'css' => 'layouts/twocol_stacked.css',
+    'content areas' => array('top' => t('Top'), 'left' => t('Left side'), 'right' => t('Right side'), 'bottom' => t('Bottom')),
+  );
+
+  return $items;
+}
+
+/**
+ * This function uses heredoc notation to make it easier to convert
+ * to a template.
+ */
+function theme_panels_twocol_stacked($id, $content) {
+  $idstr = '';
+  if (!empty($id)) {
+    $idstr = " id='$id'";
+  }
+
+  $output = <<<EOT
+<div class="panel-2col-stacked" $idstr>
+  <div class="panel-col-top">
+    <div>$content[top]</div>
+  </div>
+  <div class="panel-col-first">
+    <div>$content[left]</div>
+  </div>
+
+  <div class="panel-col-last">
+    <div>$content[right]</div>
+  </div>
+  <div class="panel-col-bottom">
+    <div>$content[bottom]</div>
+  </div>
+</div>
+<br class="panel-clearer" />
+EOT;
+  return $output;
+}
Index: modules/panels/layouts/twocol.css
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/panels/layouts/twocol.css,v
retrieving revision 1.4
diff -u -r1.4 twocol.css
--- modules/panels/layouts/twocol.css	22 Aug 2006 23:54:20 -0000	1.4
+++ modules/panels/layouts/twocol.css	8 Jan 2008 23:20:05 -0000
@@ -1,22 +1,22 @@
-/* $Id: twocol.css,v 1.4 2006/08/22 23:54:20 merlinofchaos Exp $ */
-
-.panel-2col { 
-  /* border: 1px solid red; */ 
-  overflow: hidden; 
-}
-
-.panel-2col div div { 
-  margin: .5em;
-}
-
-.panel-2col .panel-col-first { 
-  float: left; 
-  width: 50%; 
-}
-.panel-2col .panel-col-last { 
-  float: left; 
-  width: 50%; 
-}
-.panel-clearer {
-  clear: both;
-}
+/* $Id: twocol.css,v 1.4 2006/08/22 23:54:20 merlinofchaos Exp $ */
+
+.panel-2col { 
+  /* border: 1px solid red; */ 
+  overflow: hidden; 
+}
+
+.panel-2col div div { 
+  margin: .5em;
+}
+
+.panel-2col .panel-col-first { 
+  float: left; 
+  width: 50%; 
+}
+.panel-2col .panel-col-last { 
+  float: left; 
+  width: 50%; 
+}
+.panel-clearer {
+  clear: both;
+}
Index: modules/panels/layouts/twocol_stacked.css
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/panels/layouts/twocol_stacked.css,v
retrieving revision 1.4.4.1
diff -u -r1.4.4.1 twocol_stacked.css
--- modules/panels/layouts/twocol_stacked.css	15 Mar 2007 20:16:53 -0000	1.4.4.1
+++ modules/panels/layouts/twocol_stacked.css	8 Jan 2008 23:20:05 -0000
@@ -1,27 +1,27 @@
-/* $Id: twocol_stacked.css,v 1.4.4.1 2007/03/15 20:16:53 merlinofchaos Exp $ */
-
-.panel-2col-stacked { 
-  /* border: 1px solid red; */ 
-  overflow: hidden; 
-}
-
-.panel-2col-stacked div > div {
-  margin: .5px;
-}
-
-.panel-2col-stacked .panel-col-top,
-.panel-2col-stacked .panel-col-bottom {
-  width: 99.9%;
-  clear: both;
-}
-.panel-2col-stacked .panel-col-first {
-  float: left;
-  width: 47%;
-}
-.panel-2col-stacked .panel-col-last {
-  float: right;
-  width: 47%;
-}
-.panel-clearer {
-  clear: both;
-}
+/* $Id: twocol_stacked.css,v 1.4.4.1 2007/03/15 20:16:53 merlinofchaos Exp $ */
+
+.panel-2col-stacked { 
+  /* border: 1px solid red; */ 
+  overflow: hidden; 
+}
+
+.panel-2col-stacked div > div {
+  margin: .5px;
+}
+
+.panel-2col-stacked .panel-col-top,
+.panel-2col-stacked .panel-col-bottom {
+  width: 99.9%;
+  clear: both;
+}
+.panel-2col-stacked .panel-col-first {
+  float: left;
+  width: 47%;
+}
+.panel-2col-stacked .panel-col-last {
+  float: right;
+  width: 47%;
+}
+.panel-clearer {
+  clear: both;
+}
Index: modules/panels/layouts/threecol_33_34_33.css
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/panels/layouts/threecol_33_34_33.css,v
retrieving revision 1.4
diff -u -r1.4 threecol_33_34_33.css
--- modules/panels/layouts/threecol_33_34_33.css	22 Aug 2006 23:54:20 -0000	1.4
+++ modules/panels/layouts/threecol_33_34_33.css	8 Jan 2008 23:20:05 -0000
@@ -1,24 +1,24 @@
-/* $Id: threecol_33_34_33.css,v 1.4 2006/08/22 23:54:20 merlinofchaos Exp $ */
-
-.panel-3col-33 { 
-  /* border: 1px solid red; */ 
-  overflow: hidden; 
-}
-.panel-3col-33 div div { 
-  margin: .5em;
-}
-.panel-3col-33 .panel-col-first { 
-  float: left; 
-  width: 33%; 
-}
-.panel-3col-33 .panel-col { 
-  float: left; 
-  width: 34%; 
-}
-.panel-3col-33 .panel-col-last { 
-  float: left; 
-  width: 33%; 
-}
-.panel-clearer {
-  clear: both;
-}
+/* $Id: threecol_33_34_33.css,v 1.4 2006/08/22 23:54:20 merlinofchaos Exp $ */
+
+.panel-3col-33 { 
+  /* border: 1px solid red; */ 
+  overflow: hidden; 
+}
+.panel-3col-33 div div { 
+  margin: .5em;
+}
+.panel-3col-33 .panel-col-first { 
+  float: left; 
+  width: 33%; 
+}
+.panel-3col-33 .panel-col { 
+  float: left; 
+  width: 34%; 
+}
+.panel-3col-33 .panel-col-last { 
+  float: left; 
+  width: 33%; 
+}
+.panel-clearer {
+  clear: both;
+}
Index: modules/panels/layouts/threecol_25_50_25_stacked.css
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/panels/layouts/threecol_25_50_25_stacked.css,v
retrieving revision 1.3
diff -u -r1.3 threecol_25_50_25_stacked.css
--- modules/panels/layouts/threecol_25_50_25_stacked.css	24 Jul 2006 23:56:08 -0000	1.3
+++ modules/panels/layouts/threecol_25_50_25_stacked.css	8 Jan 2008 23:20:05 -0000
@@ -1,26 +1,26 @@
-/* $Id: threecol_25_50_25_stacked.css,v 1.3 2006/07/24 23:56:08 merlinofchaos Exp $ */
-
-.panel-3col-stacked { 
-  /* border: 1px solid red; */ 
-  overflow: hidden; 
-}
-.panel-3col-stacked div div { 
-  margin: .5em;
-}
-.panel-3col-stacked .panel-col-top,
-.panel-3col-stacked .panel-col-bottom { 
-  width: 100%; 
-  clear: both;
-}
-.panel-3col-stacked .panel-col-first { 
-  float: left; 
-  width: 25%; 
-}
-.panel-3col-stacked .panel-col { 
-  float: left; 
-  width: 50%; 
-}
-.panel-3col-stacked .panel-col-last { 
-  float: left; 
-  width: 25%; 
-}
+/* $Id: threecol_25_50_25_stacked.css,v 1.3 2006/07/24 23:56:08 merlinofchaos Exp $ */
+
+.panel-3col-stacked { 
+  /* border: 1px solid red; */ 
+  overflow: hidden; 
+}
+.panel-3col-stacked div div { 
+  margin: .5em;
+}
+.panel-3col-stacked .panel-col-top,
+.panel-3col-stacked .panel-col-bottom { 
+  width: 100%; 
+  clear: both;
+}
+.panel-3col-stacked .panel-col-first { 
+  float: left; 
+  width: 25%; 
+}
+.panel-3col-stacked .panel-col { 
+  float: left; 
+  width: 50%; 
+}
+.panel-3col-stacked .panel-col-last { 
+  float: left; 
+  width: 25%; 
+}
Index: modules/panels/layouts/twocol.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/panels/layouts/twocol.inc,v
retrieving revision 1.6
diff -u -r1.6 twocol.inc
--- modules/panels/layouts/twocol.inc	22 Aug 2006 23:54:20 -0000	1.6
+++ modules/panels/layouts/twocol.inc	8 Jan 2008 23:20:05 -0000
@@ -1,41 +1,42 @@
-<?php
-// $Id: twocol.inc,v 1.6 2006/08/22 23:54:20 merlinofchaos Exp $
-/**
- * implementation of hook_panels_layouts
- */
-function panels_twocol_panels_layouts() {
-  $items['twocol'] = array(
-    'module' => 'panels',
-    'title' => t('Two column'),
-    'icon' => 'layouts/twocol.png',
-    'theme' => 'panels_twocol',
-    'css' => 'layouts/twocol.css',
-    'content areas' => array('left' => t('Left side'), 'right' => t('Right side')),
-  );
-
-  return $items;
-}
-
-/**
- * This function uses heredoc notation to make it easier to convert
- * to a template.
- */
-function theme_panels_twocol($id, $content) {
-  if ($id) {
-    $idstr = " id='$id'";
-  }
-
-  $output = <<<EOT
-<div class="panel-2col" $idstr>
-  <div class="panel-col-first">
-    <div>$content[left]</div>
-  </div>
-
-  <div class="panel-col-last">
-    <div>$content[right]</div>
-  </div>
-</div>
-<br class="panel-clearer" />
-EOT;
-  return $output;
-}
+<?php
+// $Id: twocol.inc,v 1.6 2006/08/22 23:54:20 merlinofchaos Exp $
+/**
+ * implementation of hook_panels_layouts
+ */
+function panels_twocol_panels_layouts() {
+  $items['twocol'] = array(
+    'module' => 'panels',
+    'title' => t('Two column'),
+    'icon' => 'layouts/twocol.png',
+    'theme' => 'panels_twocol',
+    'css' => 'layouts/twocol.css',
+    'content areas' => array('left' => t('Left side'), 'right' => t('Right side')),
+  );
+
+  return $items;
+}
+
+/**
+ * This function uses heredoc notation to make it easier to convert
+ * to a template.
+ */
+function theme_panels_twocol($id, $content) {
+  $idstr = '';
+  if (!empty($id)) {
+    $idstr = " id='$id'";
+  }
+
+  $output = <<<EOT
+<div class="panel-2col" $idstr>
+  <div class="panel-col-first">
+    <div>$content[left]</div>
+  </div>
+
+  <div class="panel-col-last">
+    <div>$content[right]</div>
+  </div>
+</div>
+<br class="panel-clearer" />
+EOT;
+  return $output;
+}
Index: modules/panels/layouts/threecol_33_34_33.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/panels/layouts/threecol_33_34_33.inc,v
retrieving revision 1.5
diff -u -r1.5 threecol_33_34_33.inc
--- modules/panels/layouts/threecol_33_34_33.inc	22 Aug 2006 23:54:20 -0000	1.5
+++ modules/panels/layouts/threecol_33_34_33.inc	8 Jan 2008 23:20:05 -0000
@@ -1,45 +1,46 @@
-<?php
-// $Id: threecol_33_34_33.inc,v 1.5 2006/08/22 23:54:20 merlinofchaos Exp $
-/**
- * implementation of hook_panels_layouts
- */
-function panels_threecol_33_34_33_panels_layouts() {
-  $items['threecol_33_34_33'] = array(
-    'module' => 'panels',
-    'title' => t('Three column 33/34/33'),
-    'icon' => 'layouts/threecol_33_34_33.png',
-    'theme' => 'panels_threecol_33_34_33',
-    'css' => 'layouts/threecol_33_34_33.css',
-    'content areas' => array('left' => t('Left side'), 'middle' => t('Middle column'), 'right' => t('Right side')),
-  );
-
-  return $items;
-}
-
-/**
- * This function uses heredoc notation to make it easier to convert
- * to a template.
- */
-function theme_panels_threecol_33_34_33($id, $content) {
-  if ($id) {
-    $idstr = " id='$id'";
-  }
-
-  $output = <<<EOT
-<div class="panel-3col-33" $idstr>
-  <div class="panel-col-first">
-    <div>$content[left]</div>
-  </div>
-
-  <div class="panel-col">
-    <div>$content[middle]</div>
-  </div>
-
-  <div class="panel-col-last">
-    <div>$content[right]</div>
-  </div>
-</div>
-<br class="panel-clearer" />
-EOT;
-  return $output;
-}
+<?php
+// $Id: threecol_33_34_33.inc,v 1.5 2006/08/22 23:54:20 merlinofchaos Exp $
+/**
+ * implementation of hook_panels_layouts
+ */
+function panels_threecol_33_34_33_panels_layouts() {
+  $items['threecol_33_34_33'] = array(
+    'module' => 'panels',
+    'title' => t('Three column 33/34/33'),
+    'icon' => 'layouts/threecol_33_34_33.png',
+    'theme' => 'panels_threecol_33_34_33',
+    'css' => 'layouts/threecol_33_34_33.css',
+    'content areas' => array('left' => t('Left side'), 'middle' => t('Middle column'), 'right' => t('Right side')),
+  );
+
+  return $items;
+}
+
+/**
+ * This function uses heredoc notation to make it easier to convert
+ * to a template.
+ */
+function theme_panels_threecol_33_34_33($id, $content) {
+  $idstr = '';
+  if (!empty($id)) {
+    $idstr = " id='$id'";
+  }
+
+  $output = <<<EOT
+<div class="panel-3col-33" $idstr>
+  <div class="panel-col-first">
+    <div>$content[left]</div>
+  </div>
+
+  <div class="panel-col">
+    <div>$content[middle]</div>
+  </div>
+
+  <div class="panel-col-last">
+    <div>$content[right]</div>
+  </div>
+</div>
+<br class="panel-clearer" />
+EOT;
+  return $output;
+}
Index: modules/panels/panels.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/panels/panels.install,v
retrieving revision 1.1.4.4
diff -u -r1.1.4.4 panels.install
--- modules/panels/panels.install	3 Apr 2007 16:36:05 -0000	1.1.4.4
+++ modules/panels/panels.install	8 Jan 2008 23:20:00 -0000
@@ -2,83 +2,107 @@
 // $Id: panels.install,v 1.1.4.4 2007/04/03 16:36:05 merlinofchaos Exp $
 
 /**
- * Install the panels tables
+ * Implementation of hook_install().
  */
 function panels_install() {
-  switch ($GLOBALS['dbtype']) {
-    case 'pgsql':
-      db_query(<<<EOT
-        CREATE TABLE {panels_info} (
-          did int not null default 0 primary key,
-          title varchar(128),
-          access varchar(128),
-          path varchar(128),
-          css_id varchar(128),
-          layout varchar(32)
-        );
-EOT
-      );
-      
-      db_query("CREATE SEQUENCE {panels_info}_id_seq;");
-  
-      db_query(<<<EOT
-        CREATE TABLE {panels_area} (
-          did int NOT NULL DEFAULT 0,
-          area varchar(32),
-          type varchar(32),
-          configuration text,
-          position int
-        );
-EOT
-  );
-  
-      db_query("CREATE INDEX {panels_area}_did_idx ON {panels_area} (did);");
-      break;
-    case 'mysql':
-    case 'mysqli':
-    default:
-      db_query(<<<EOT
-        create table {panels_info} (
-          did int(10) not null default 0 primary key,
-          title varchar(128),
-          access varchar(128),
-          path varchar(128),
-          css_id varchar(128),
-          layout varchar(32)
-        ) /*!40100 DEFAULT CHARACTER SET utf8 */
-EOT
-      );
-      db_query(<<<EOT
-        create table {panels_area} (
-          did int(10) not null default 0,
-          area varchar(32),
-          type varchar(32),
-          configuration longtext,
-          position int(5),
-          key (did)
-        ) /*!40100 DEFAULT CHARACTER SET utf8 */
-EOT
-  );
-  }
+  drupal_install_schema('panels');
 }
 
 /**
- * Uninstall the panels tables
+ * Implementation of hook_uninstall().
  */
 function panels_uninstall() {
-  switch ($GLOBALS['db_type']) {
-    case 'pgsql':
-    case 'mysql':
-    case 'mysqli':
-    default:
-      db_query("DROP TABLE {panels_info}");
-      db_query("DROP TABLE {panels_area}");
-  }
+  drupal_uninstall_schema('panels');
 }
 
 /**
- * Update the tables to UTF-8
+ * Change D5 tables to auto increment.
  */
-function panels_update_1() {
-  return _system_update_utf8(array('panels_info', 'panels_area'));
+function panels_update_6100() {
+  $ret = array();
+  db_change_field($ret, 'panels_info', 'did', 'did', array('type' => 'serial', 'not null' => TRUE));
+  return $ret;
 }
+
+/**
+ * Implementation of hook_schema().
+ */
+function panels_schema() {
+
+  $schema['panels_info'] = array(
+    'fields' => array(
+      'did' => array(
+        'description' => t('Primary key: Unique panel ID.'),
+        'type' => 'serial',
+        'not null' => TRUE,
+      ),
+      'title' => array(
+        'description' => t('Title of this panel.'),
+        'type' => 'varchar',
+        'length' => '128',
+        'not null' => FALSE
+      ),
+      'access' => array(
+        'description' => t('List of roles that will be able to see this panel in any form.'),
+        'type' => 'varchar',
+        'length' => '128',
+        'not null' => FALSE
+      ),
+      'path' => array(
+        'description' => t('The URL path to give this page.'),
+        'type' => 'varchar',
+        'length' => '128',
+        'not null' => FALSE
+      ),
+      'css_id' => array(
+        'description' => t('The CSS ID to apply to this page.'),
+        'type' => 'varchar',
+        'length' => '128',
+        'not null' => FALSE
+      ),
+      'layout' => array(
+        'description' => t('Name of layout used by the panel.'),
+        'type' => 'varchar',
+        'length' => '32',
+        'not null' => FALSE
+      )
+    ),
+    'primary key' => array('did'),
+  );
+
+  $schema['panels_area'] = array(
+    'fields' => array(
+      'did' => array(
+        'description' => t('Unique panel ID.'),
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0,
+      ),
+      'area' => array(
+        'type' => 'varchar',
+        'length' => '32',
+        'not null' => FALSE
+      ),
+      'type' => array(
+        'description' => t('Content area name'),
+        'type' => 'varchar',
+        'length' => '32',
+        'not null' => FALSE
+      ),
+      'configuration' => array(
+        'type' => 'text',
+        'size' => 'big',
+        'not null' => FALSE
+      ),
+      'position' => array(
+        'type' => 'int',
+        'not null' => FALSE,
+      )
+    ),
+    'indexes' => array(
+      'did' => array('did')
+    ),
+  );
+
+  return $schema;
+}
\ No newline at end of file
Index: modules/panels/panels.info
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/panels/panels.info,v
retrieving revision 1.2.2.1
diff -u -r1.2.2.1 panels.info
--- modules/panels/panels.info	18 Jun 2007 23:06:56 -0000	1.2.2.1
+++ modules/panels/panels.info	8 Jan 2008 23:20:00 -0000
@@ -1,4 +1,4 @@
 ; $Id: panels.info,v 1.2.2.1 2007/06/18 23:06:56 dww Exp $
 name = Panels
 description = Create pages that are divided into areas of the page.
-
+core = 6.x
Index: modules/panels/API.txt
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/panels/API.txt,v
retrieving revision 1.2
diff -u -r1.2 API.txt
--- modules/panels/API.txt	26 Jul 2006 16:53:40 -0000	1.2
+++ modules/panels/API.txt	8 Jan 2008 23:20:00 -0000
@@ -1,125 +1,125 @@
-The API for expanding the panels module comes in two pieces. First there is the 
-layout API, which adds to the list of layouts you need. Second is the content
-types API, which lets modules supply content to the panels. Natively, panels
-module supports the content types of 'block', which just renders the output
-of a block, 'node' which simply renders a node_view, 'custom' which allows the
-user to enter custom content with filtering, and finally 'views' because I
-wrote them both.
-
-Where to put your code:
-=======================
-
-With both types, there are two ways to implement a new type. First, you can
-implement the hook in your module and provide the necessary data. Or you
-can create a .inc file in the right format, and drop it into the proper
-directory in the panels module. Both are very similar, and only requires
-a minor naming adjustment.
-
-When using the .inc file, in place of 'hook' in the various hooks, use
-panels_FILENAME. 
-
-Creating a new Layout Type:
-===========================
-
-A layout consists of 4 things:
-
-1) A bit of HTML in a theme function. I use heredoc notation to make it
-   extra easy to convert these to .tpl.inc files in case they are to
-   be overridden in php template.
-2) A bit of CSS to describe how the layout should be, well, laid out.
-3) An icon that is 50x75 which gives the user a visual indication of
-   what the layout looks like.
-4) An implementation of hook_panels_layouts() to tell panels the necessary 
-   information.
-
-hook_panels_layouts returns an array with the following information:
-
-'module' => The module name providing this. This is necessary because it
-            uses drupal_get_path('module', $module) to get the proper
-            path for included CSS.
-'title'  => The title of the layout presented to the user. Use t().
-'icon'   => The filename of the icon to use when listing avialable layouts.
-'theme'  => The theme function that contains the HTML, without the theme_ 
-            part.
-'css'    => The CSS file.
-'content areas' => an array in the form of 'name' => t('Title') of content
-                   areas supported by the layout. For example, the simple
-                   2 column layout uses array('left' => t('Left side'), 
-                   'right' => t('Right side')); -- the name is the internal
-                   identifier. Your theme function will see it as 
-                   $content['name'] (so twocol gets $content['left'] and
-                   $content['right']).
-
-
-Creating a new Content Type:
-============================
-
-Content types require 1 hook and two callbacks. The hook defines what content 
-types are available, the first callback displays the content in a dashboard, 
-and the other callback does all of the administrative functions.
-
-hook_panels_content_types returns an array with the following information:
-'callback'  => The function to display the content.
-'admin'     => The function to administer the content.
-
-The callback function receives one argument: The $configuration array, as
-defined by the administrative callback.
-
-The administrative callback recieves 3 arguments:
-
-$op     -- the operation to perform. See below.
-&$arg1  -- The first argument should be a reference and its meaning varies 
-           based on the op.
-$arg2   -- The second argument is optional, not a reference, and should 
-           default to NULL.
-
-Administrative operations:
-
-'list':     $arg1 is the configuration array.
-    This op is called when panels lists what content is in a content
-    area. It generally returns something similar to this:
-    return '<strong>Views</strong>: ' . $view->name . ' (' . $view->description . ')';
-
-'add button': arguments not used here.
-    This op is called to display the 'add content type' button; it can also
-    display additional information (such as the list of blocks or the
-    autocomplete to select a node).
-
-    The actual button should look something like this:
-        $form['submit'] = array(
-          '#type' => 'button',
-          '#value' => t('Add view'),
-        );
-
-    And it's a good idea to do this, but it's not required:
-
-        $form['#prefix'] = '<div class="container-inline">';
-        $form['#suffix'] = '</div>';
-
-'add': $arg1 == the $configuration array
-    This op is called to see if your add button has been clicked. It *must*
-    start off by checking to see if this is true:
-
-        if ($_POST['op'] != t('Add view')) {
-          return;
-        }
-
-    If it is true, it should process that information and return a $configuration
-    array populated from whatever other form items were presented in 'add button'
-    and whatever defaults make sense.
-
-'edit': $arg1 == the $configuration array
-    This op is called to provide an edit form for a content type. It *must*
-    ensure *all* information from the conf array is available, even if it
-    is just hidden; panels has no way to remember this data between form
-    clicks, so any data not put here will be lost. No buttons need to be
-    added to the form.
-
-'validate': $arg1 == $form_values, $arg2 == $form
-    Called to validate the 'edit' form above.
-
-'save': $arg1 == $form_values
-    Called to convert a $form_values back into a $configuration array. All
-    of the default types just send $form_values back as $configuration,
-    but if you need to do some kind of transformation, this is where it
-    happens.
+The API for expanding the panels module comes in two pieces. First there is the 
+layout API, which adds to the list of layouts you need. Second is the content
+types API, which lets modules supply content to the panels. Natively, panels
+module supports the content types of 'block', which just renders the output
+of a block, 'node' which simply renders a node_view, 'custom' which allows the
+user to enter custom content with filtering, and finally 'views' because I
+wrote them both.
+
+Where to put your code:
+=======================
+
+With both types, there are two ways to implement a new type. First, you can
+implement the hook in your module and provide the necessary data. Or you
+can create a .inc file in the right format, and drop it into the proper
+directory in the panels module. Both are very similar, and only requires
+a minor naming adjustment.
+
+When using the .inc file, in place of 'hook' in the various hooks, use
+panels_FILENAME. 
+
+Creating a new Layout Type:
+===========================
+
+A layout consists of 4 things:
+
+1) A bit of HTML in a theme function. I use heredoc notation to make it
+   extra easy to convert these to .tpl.inc files in case they are to
+   be overridden in php template.
+2) A bit of CSS to describe how the layout should be, well, laid out.
+3) An icon that is 50x75 which gives the user a visual indication of
+   what the layout looks like.
+4) An implementation of hook_panels_layouts() to tell panels the necessary 
+   information.
+
+hook_panels_layouts returns an array with the following information:
+
+'module' => The module name providing this. This is necessary because it
+            uses drupal_get_path('module', $module) to get the proper
+            path for included CSS.
+'title'  => The title of the layout presented to the user. Use t().
+'icon'   => The filename of the icon to use when listing avialable layouts.
+'theme'  => The theme function that contains the HTML, without the theme_ 
+            part.
+'css'    => The CSS file.
+'content areas' => an array in the form of 'name' => t('Title') of content
+                   areas supported by the layout. For example, the simple
+                   2 column layout uses array('left' => t('Left side'), 
+                   'right' => t('Right side')); -- the name is the internal
+                   identifier. Your theme function will see it as 
+                   $content['name'] (so twocol gets $content['left'] and
+                   $content['right']).
+
+
+Creating a new Content Type:
+============================
+
+Content types require 1 hook and two callbacks. The hook defines what content 
+types are available, the first callback displays the content in a dashboard, 
+and the other callback does all of the administrative functions.
+
+hook_panels_content_types returns an array with the following information:
+'callback'  => The function to display the content.
+'admin'     => The function to administer the content.
+
+The callback function receives one argument: The $configuration array, as
+defined by the administrative callback.
+
+The administrative callback recieves 3 arguments:
+
+$op     -- the operation to perform. See below.
+&$arg1  -- The first argument should be a reference and its meaning varies 
+           based on the op.
+$arg2   -- The second argument is optional, not a reference, and should 
+           default to NULL.
+
+Administrative operations:
+
+'list':     $arg1 is the configuration array.
+    This op is called when panels lists what content is in a content
+    area. It generally returns something similar to this:
+    return '<strong>Views</strong>: ' . $view->name . ' (' . $view->description . ')';
+
+'add button': arguments not used here.
+    This op is called to display the 'add content type' button; it can also
+    display additional information (such as the list of blocks or the
+    autocomplete to select a node).
+
+    The actual button should look something like this:
+        $form['submit'] = array(
+          '#type' => 'button',
+          '#value' => t('Add view'),
+        );
+
+    And it's a good idea to do this, but it's not required:
+
+        $form['#prefix'] = '<div class="container-inline">';
+        $form['#suffix'] = '</div>';
+
+'add': $arg1 == the $configuration array
+    This op is called to see if your add button has been clicked. It *must*
+    start off by checking to see if this is true:
+
+        if ($_POST['op'] != t('Add view')) {
+          return;
+        }
+
+    If it is true, it should process that information and return a $configuration
+    array populated from whatever other form items were presented in 'add button'
+    and whatever defaults make sense.
+
+'edit': $arg1 == the $configuration array
+    This op is called to provide an edit form for a content type. It *must*
+    ensure *all* information from the conf array is available, even if it
+    is just hidden; panels has no way to remember this data between form
+    clicks, so any data not put here will be lost. No buttons need to be
+    added to the form.
+
+'validate': $arg1 == $form_values, $arg2 == $form
+    Called to validate the 'edit' form above.
+
+'save': $arg1 == $form_values
+    Called to convert a $form_values back into a $configuration array. All
+    of the default types just send $form_values back as $configuration,
+    but if you need to do some kind of transformation, this is where it
+    happens.
Index: modules/panels/README.txt
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/panels/README.txt,v
retrieving revision 1.4.4.1
diff -u -r1.4.4.1 README.txt
--- modules/panels/README.txt	15 Mar 2007 19:16:32 -0000	1.4.4.1
+++ modules/panels/README.txt	8 Jan 2008 23:20:00 -0000
@@ -1,26 +1,26 @@
-The panels module is the ideological son, successor to and almost complete 
-replacement for the dashboard module. This module allows you to create pages 
-that are divided into areas of the page. Where the dashboard module only gave 
-four areas--top, bottom, left and right--this one is a completely flexible 
-system that includes a couple of 2 column and 3 column layouts by default, but 
-is also highly extensible and other layouts can be plugged in with a little HTML 
-and CSS knowledge, with just enough PHP knowledge to be able to edit an include 
-file without breaking it.
-
-Perhaps most importantly, unlike the dashboard module it requires no fiddling 
-with PHP code to include the things you want; the interface lets you add blocks, 
-nodes and custom content just by selecting and clicking. 
-
-If you want to override the CSS of a panel, the easiest way is to just copy
-the CSS into your theme directory and tweak; panels will look there before
-including the CSS from the module, and if it exists, will not include the
-module's CSS. If you want to just change a tiny bit but keep the basic
-structure, just add your changes to your style.css instead.
-
-If you're having problems with IE and your panels falling below your sidebars,
-try setting the width of the main panel area (example, .panel-2col-stacked) to
-98%.
-
-If you need to check if the current page is a panels page in your theme
-(for example if you want to hide some existing sidebars in your theme on
+The panels module is the ideological son, successor to and almost complete 
+replacement for the dashboard module. This module allows you to create pages 
+that are divided into areas of the page. Where the dashboard module only gave 
+four areas--top, bottom, left and right--this one is a completely flexible 
+system that includes a couple of 2 column and 3 column layouts by default, but 
+is also highly extensible and other layouts can be plugged in with a little HTML 
+and CSS knowledge, with just enough PHP knowledge to be able to edit an include 
+file without breaking it.
+
+Perhaps most importantly, unlike the dashboard module it requires no fiddling 
+with PHP code to include the things you want; the interface lets you add blocks, 
+nodes and custom content just by selecting and clicking. 
+
+If you want to override the CSS of a panel, the easiest way is to just copy
+the CSS into your theme directory and tweak; panels will look there before
+including the CSS from the module, and if it exists, will not include the
+module's CSS. If you want to just change a tiny bit but keep the basic
+structure, just add your changes to your style.css instead.
+
+If you're having problems with IE and your panels falling below your sidebars,
+try setting the width of the main panel area (example, .panel-2col-stacked) to
+98%.
+
+If you need to check if the current page is a panels page in your theme
+(for example if you want to hide some existing sidebars in your theme on
 these pages) then you can use the panels_is_panels_page() function.
\ No newline at end of file
Index: modules/panels/panels.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/panels/panels.module,v
retrieving revision 1.10.2.9
diff -u -r1.10.2.9 panels.module
--- modules/panels/panels.module	15 Mar 2007 23:13:41 -0000	1.10.2.9
+++ modules/panels/panels.module	8 Jan 2008 23:20:00 -0000
@@ -4,13 +4,11 @@
 /**
  * Implementation of hook_help()
  */
-function panels_help($section = '') {
-  switch ($section) {
+function panels_help($path, $arg) {
+  switch ($path) {
     case 'admin/build/panels':
     case 'admin/build/panels/list':
-      return t('<p>You may peruse a list of your current panels layouts and edit them, or click add to create a new page.</p>');
-    case 'admin/build/panels/add':
-      return t('<p>Choose a layout for your new page from the list below.</p>');
+      return '<p>'. t('You may peruse a list of your current panels layouts and edit them, or click add to create a new page.'). '</p>';
   }
 }
 
@@ -36,7 +34,7 @@
   }
 
   // All views with an empty access setting are available to all roles.
-  if (!$panel->access) { 
+  if (!$panel->access) {
     return TRUE;
   }
 
@@ -52,636 +50,155 @@
 /**
  * Implementation of hook_menu()
  */
-function panels_menu($may_cache) {
-  if ($may_cache) {
-    $access = user_access('create panels');
-    $items[] = array(
-      'path' => 'admin/build/panels',
-      'title' => t('Panels'),
-      'access' => $access,    
-      'callback' => 'panels_list_page',
-      'description' => t('Create pages on your site that are 2 or 3 columns'),
-    );
-    $items[] = array(
-      'path' => 'admin/build/panels/list',
-      'title' => t('List'),
-      'access' => $access,    
-      'callback' => 'panels_list_page',
-      'weight' => -10,
-      'type' => MENU_DEFAULT_LOCAL_TASK,
-    );
-    $items[] = array(
-      'path' => 'admin/build/panels/add',
-      'title' => t('Add'),
-      'access' => $access,    
-      'callback' => 'panels_add_page',
-      'type' => MENU_LOCAL_TASK,
-    );
-    $items[] = array(
-      'path' => 'admin/build/panels/add/layout',
-      'title' => t('Add'),
-      'access' => $access,    
-      'callback' => 'panels_add_layout_page',
-      'type' => MENU_LOCAL_TASK,
-    );
-    $items[] = array(
-      'path' => 'admin/build/panels/edit',
-      'title' => t('Edit panels'),
-      'access' => $access,    
-      'callback' => 'panels_edit_page',
-      'type' => MENU_CALLBACK,
-    );
-    $items[] = array(
-      'path' => 'admin/build/panels/delete',
-      'title' => t('Delete panels'),
-      'access' => $access,    
-      'callback' => 'drupal_get_form',
-      'callback arguments' => array('panels_delete_confirm'),
-      'type' => MENU_CALLBACK,
-    );
+function panels_menu() {
 
-    $items[] = array(
-      'path' => 'panels/node/autocomplete',
-      'title' => t('Autocomplete node'),
-      'callback' => 'panels_node_autocomplete',
-      'access' => user_access('access content'),
+  $access = array('create panels');
+  $items['admin/build/panels'] = array(
+    'title' => 'Panels',
+    'description' => 'Create pages on your site that are 2 or 3 columns',
+    'page callback' => '_panels_list_page',
+    'access arguments' => $access,
+    'file' => 'panels.admin.inc',
+  );
+   $items['admin/build/panels/list'] = array(
+    'title' => 'List',
+    'page callback' => '_panels_list_page',
+    'access arguments' => $access,
+    'weight' => -10,
+    'type' => MENU_DEFAULT_LOCAL_TASK,
+    'file' => 'panels.admin.inc',
+  );
+  $items['admin/build/panels/add'] = array(
+    'title' => 'Add',
+    'access arguments' => $access,
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('panels_add_page_form'),
+    'type' => MENU_LOCAL_TASK,
+    'file' => 'panels.admin.inc',
+  );
+  $items['admin/build/panels/add/%/page'] = array(
+    'title' => 'Select panels layout',
+    'access arguments' => $access,
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('panels_add_page_form', 4),
+    'type' => MENU_CALLBACK,
+    'file' => 'panels.admin.inc',
+  );
+  /* FIXME: Looks like dead code!?
+  $items['admin/build/panels/add/layout'] = array(
+    'title' => 'Add',
+    'access arguments' => $access,
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('panels_add_layout_form'),
+    'type' => MENU_LOCAL_TASK,
+  ); */
+  $items['admin/build/panels/edit/%panels'] = array(
+    'title' => 'Edit panels',
+    'access arguments' => $access,
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('panels_edit_form', 4),
+    'type' => MENU_CALLBACK,
+    'file' => 'panels.admin.inc',
+  );
+  $items['admin/build/panels/delete/%panels'] = array(
+    'title' => 'Delete panels',
+    'access arguments' => $access,
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('panels_delete_form', 4),
+    'type' => MENU_CALLBACK,
+    'file' => 'panels.admin.inc',
+  );
+
+  $items['panels/node/autocomplete'] = array(
+    'title' => 'Autocomplete node',
+    'page callback' => '_panels_node_autocomplete',
+    'access arguments' => array('access content'),
+    'type' => MENU_CALLBACK,
+    'file' => 'panels.admin.inc',
+  );
+
+  // load panels from database
+  $result = db_query("SELECT * FROM {panels_info}");
+  // FIXME: Fow now we're making these all callbacks, but we
+  // should steal code from Views so they can be normal, tabs,
+  // etc
+  while ($panels = db_fetch_object($result)) {
+    // FIXME: $panels->access = ($panels->access ? explode(', ', $panels->access) : array());
+    $items[$panels->path] = array(
+      'title' => filter_xss_admin($panels->title),
+      'access callback' => panels_access($panels),
+      'page callback' => '_panels_panels_page',
+      'page arguments' => array($panels->did),
       'type' => MENU_CALLBACK
     );
-
-    // load panels from database
-    $result = db_query("SELECT * FROM {panels_info}");
-    // FIXME: Fow now we're making these all callbacks, but we
-    // should steal code from Views so they can be normal, tabs,
-    // etc
-    while ($panels = db_fetch_object($result)) {
-      $panels->access = ($panels->access ? explode(', ', $panels->access)  : array());
-      $items[] = array(
-        'path' => $panels->path,
-        'title' => filter_xss_admin($panels->title),
-        'access' => panels_access($panels),
-        'callback' => 'panels_panels_page',
-        'callback arguments' => array($panels->did),
-        'type' => MENU_CALLBACK
-      );
-    }
-  }
-  return $items;
-}
-
-/**
- * panels path helper function
- */
-function panels_get_file_path($module, $file, $base_path = true) {
-  if ($base_path) {
-    $output = base_path();
   }
-  return $output . drupal_get_path('module', $module) . '/' . $file;
-}
-
-// ---------------------------------------------------------------------------
-// panels custom image button
-
-/**
- * Custom form element to do our nice images.
- */
-function panels_elements() {
-  $type['panels_imagebutton'] = array('#input' => TRUE, '#button_type' => 'submit',);
-  return $type;
-}
-
-/**
- * Theme our image button.
- */
-function theme_panels_imagebutton($element) {
-  return '<input type="image" class="form-'. $element['#button_type'] .'" name="'. $element['#name'] .'" value="'. check_plain($element['#default_value']) .'" '. drupal_attributes($element['#attributes']) . ' src="' . $element['#image'] . '" alt="' . $element['#title'] . '" title="' . $element['#title'] . "\" />\n";
-}
-
-function panels_imagebutton_value() {
-  // null function guarantees default_value doesn't get moved to #value.
-}
-
-/**
- * Add a single button to a form.
- */
-function panels_add_button($image, $name, $text) {
-  $module_path = base_path() . drupal_get_path('module', 'panels');
-
-  return array(
-    '#type' => 'panels_imagebutton',
-    '#image' => $module_path . '/images/' . $image,
-    '#title' => $text,
-    '#default_value' => $name,
-  );
-}
 
-/**
- * Set a button to a blank image -- used for placeholders when buttons are
- * not relevant but just removing it would be visually unappealing.
- */
-function panels_set_blank(&$form) {
-  $form['#type'] = 'markup';
-  $form['#value'] = theme('image', drupal_get_path('module', 'panels') . '/images/blank.gif');
+  return $items;
 }
 
-// ---------------------------------------------------------------------------
-// panels administrative pages
-
 /**
- * Provide a list of panels, with links to edit or delete them.
- */
-function panels_list_page() {
-  $result = db_query("SELECT * FROM {panels_info} ORDER BY title");
-  while ($panels = db_fetch_object($result)) {
-    $item = array();
-    $item[] = check_plain($panels->title);
-    $item[] = l($panels->path, $panels->path);
-    $item[] = implode(' | ', array(
-      l(t('Edit'), "admin/build/panels/edit/$panels->did"),
-      l(t('Delete'), "admin/build/panels/delete/$panels->did"),
-    ));
-    $items[] = $item;
-  }
-  $header = array(
-    t('Panel title'),
-    t('URL'),
-    t('Operations'),
-  );
-  $output = theme('table', $header, $items);
-  return $output;
-}
-
-/*
- * Provide a form to confirm deletion of a panel page.
+ * Menu helper function to verifies panel existence and loads panels data.
  */
-function panels_delete_confirm($did = '') {
-  $panels = panels_load_panels($did);
-
-  if (!$panels) {
-    drupal_goto('admin/build/panels');
-  }
-
-  $form['did'] = array('#type' => 'value', '#value' => $panels->did);
-  return confirm_form( $form,
-    t('Are you sure you want to delete %title?', array('%title' => $panels->title)),
-    $_GET['destination'] ? $_GET['destination'] : 'admin/build/panels',
-    t('This action cannot be undone.'),
-    t('Delete'), t('Cancel')
-  );
-}
-
-/*
- * Handle the submit button to delete a panel page.
- */
-function panels_delete_confirm_submit($formid, $form) {
-  if ($form['confirm']) {
-    panels_delete_panels((object) $form);
-    return 'admin/build/panels';
-  }
+function panels_load($did) {
+  return _panels_load_panels($did);
 }
 
 /**
- * Handle the add panels page
+ * panels path helper function
  */
-function panels_add_page($layout = NULL) {
-  $layouts = panels_get_layouts();
-  drupal_add_css(drupal_get_path('module', 'panels') . '/panels_admin.css');
-  if (!$layout) {
-    foreach ($layouts as $id => $layout) {
-      if (!$default_id) {
-        // grab the first one for our default.
-        $default_id = $id;
-      }
-      $file = panels_get_file_path($layout['module'], $layout['icon'], false);
-      $output .= theme('panels_add_image', $layout[title], $id, l(theme('image', $file), $_GET['q'] . '/' . $id, NULL, NULL, NULL, NULL, TRUE));
-    }
-    return $output;
-  }
-
-  if (!$layouts[$layout]) {
-    return drupal_not_found();
-  }
-
-  $panels->layout = $layout;
-  return drupal_get_form('panels_edit_form', $panels);
-}
-
-function theme_panels_add_image($title, $id, $image) {
-  $output .= '<div class="layout-link">';
-  $output .= $image;
-  $output .= '<div>' . l($title, $_GET['q'] . '/' . $id) . '</div>';
-  $output .= '</div>';
-  return $output;
-}
-// ---------------------------------------------------------------------------
-// panels administrative pages
-
-function panels_edit_page($did = NULL) {
-  if (!$did || !($panels = panels_load_panels($did))) {
-    return drupal_not_found();
+function _panels_get_file_path($module, $file, $base_path = true) {
+  $output = '';
+  if ($base_path) {
+    $output = base_path();
   }
-  return drupal_get_form('panels_edit_form', $panels);
-}
-
-/**
- * shortcut to ease the syntax of the various form builder tricks we use.
- */
-function panels_form_builder(&$form, $form_id = 'panels_edit_form') {
-  $form['#post'] = $_POST;
-  $form = form_builder($form_id, $form);
+  return $output . drupal_get_path('module', $module) .'/'. $file;
 }
 
 /**
- * Edit an already loaded panels.
+ * Register Theme functions.
  */
-function panels_edit_form($panels) {
-  drupal_add_css(drupal_get_path('module', 'panels') . '/panels_admin.css');
-  $layouts = panels_get_layouts();
-  $layout = $layouts[$panels->layout];
-
-  $content_types = panels_get_content_types();
-
-  // Process all our add button stuff first so we can add stuff to the
-  // form semi dynamically.
-
-  $form['add'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Add content'),
-    '#collapsible' => false,
-    '#description' => t('Select an area to add content to, then select a type of content and click the appropriate button. The content will be added.'),
-  );
-
-  // Drop the array keys into a temporary in order to protect references.
-  $temp = array_keys($layout['content areas']);
-  $default_radio = array_shift($temp);
-
-  $form['add']['area'] = array(
-    '#type' => 'radios',
-    '#title' => t('Area'),
-    '#options' => $layout['content areas'],
-    '#prefix' => '<div class="container-inline">',
-    '#suffix' => '</div>',
-    '#default_value' => $default_radio,
-  );
-  foreach ($content_types as $id => $type) {
-    $function = $type['admin'];
-    if (function_exists($function)) {
-      global $form_values;
-      $form['add'][$id] = $function('add button', $dummy); 
-      
-      // $dummy needed for cause you can't have default args on a reference.
-      $form['add'][$id]['#parents'] = array('add', $id);
-      $form['add'][$id]['#tree'] = true;
-      panels_form_builder($form['add'][$id]);
-
-      if ($conf = $function('add', $form_values['add'][$id])) {
-        $add->configuration = $conf;
-        $add->type = $id;
-        $form['add']['area']['#parents'] = array('area');
-        panels_form_builder($form['add']['area']);
-        $add->area = $form_values['area'];
-      }
-    }
-  }
-
-  $form['layout'] = array(
-    '#type' => 'value',
-    '#value' => $panels->layout
-  );
-
-  $form['did'] = array(
-    '#type' => 'value',
-    '#value' => $panels->did,
-  );
-
-  $form['info'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('General information'),
-    '#collapsible' => false,
-  );
-
-  $file = panels_get_file_path($layout['module'], $layout['icon'], false);
-  $icon .= theme('image', $file);
-  $form['info']['layout-icon'] = array(
-    '#value' => '<div class="layout-icon">' . $icon . '</div>',
-  );
-
-  $form['info']['layout-display'] = array(
-    '#value' => '<strong>Layout</strong>: ' . $layout['title'],
-  );
-
-  $form['info']['title'] = array(
-    '#type' => 'textfield',
-    '#default_value' => $panels->title,
-    '#title' => t('Page title'),
-    '#description' => t('The page title for this panels layout'),
-  );
-
-  $form['info']['css_id'] = array(
-    '#type' => 'textfield',
-    '#default_value' => $panels->css_id,
-    '#title' => t('CSS ID'),
-    '#description' => t('The CSS ID to apply to this page'),
-  );
-
-  $rids = array();
-  $result = db_query("SELECT r.rid, r.name FROM {role} r ORDER BY r.name");
-  while ($obj = db_fetch_object($result)) {
-    $rids[$obj->rid] = $obj->name;
-  }
-
-  $form['info']['access'] = array(
-    '#type' => 'checkboxes',
-    '#title' => t('Access'),
-    '#default_value' => $panels->access,
-    '#options' => $rids,
-    '#description' => t('Only the checked roles will be able to see this panel in any form; if no roles are checked, access will not be restricted.'),
-  );
-
-  $form['info']['path'] = array(
-    '#type' => 'textfield',
-    '#default_value' => $panels->path,
-    '#title' => t('Path'),
-    '#description' => t('The URL path to give this page, i.e, path/to/page'),
-    '#required' => TRUE,
-  );
+function panels_theme() {
 
-  $form['content'] = array(
-    '#tree' => true,
+  // Static array of theme functions.
+  $theme_registry_static = array(
+    'panels_imagebutton' => array(
+      'arguments' => array('element'),
+    ),
+    'panels_add_image' => array(
+      'arguments' => array('title', 'id', 'image'),
+    ),
+    'panels_edit_form' => array(
+      'arguments' => array('form'),
+    ),
+    'panels_content_custom' => array(
+      'arguments' => array('title', 'body', 'css_id', 'css_class'),
+    ),
+    'panels_content_views' => array(
+      'arguments' => array('content', 'title'),
+    ),
   );
-  
-  // Go through our content areas and display what we have.
-  foreach ($layout['content areas'] as $area => $title) {
-    $list = array();
-    $form['content'][$area] = array(
-      '#tree' => true,
-    );
-
-    // Construct the order, feeding it the default order for what
-    // we know about. When we pull it back out, it may well be
-    // different due to past submits.
-    $order = array();
-    if (is_array($panels->content[$area])) {
-	    $order = array_keys($panels->content[$area]);
-    }
-  	$form['content'][$area]['order'] = array(
-      '#type' => 'hidden',
-      '#default_value' => serialize($order),
-      '#parents' => array('content', $area, 'order'),
-    );
-
-    // If an add button has added an item to the area, put it in and update
-    // the $order.
-    panels_form_builder($form['content'][$area]['order']);
-    $order = unserialize($form['content'][$area]['order']['#value']);
-    if ($add->area == $area) {
-      // say THIS 5 times real fast
-      if ($panels->content[$area] && $order) {
-        $position = max(max(array_keys($order)), max(array_keys($panels->content[$area]))) + 1;
-      }
-      else if ($order) {
-        $position = max(array_keys($order)) + 1;
-      }
-      else {
-        $position = 0;
-      }
-
-      $panels->content[$area][$position] = $add;
-      $order[] = $position;
-      $form['content'][$area]['order']['#value'] = serialize($order);
-    }
-
-    // Go through each item in the area and render it.
-    $count = count($order);
-    foreach ($order as $position => $id) {
-      // place buttons to re-order content. 
-      $form['content'][$area][$id]['buttons'] = array(
-        '#parents' => array('content', $area, $id, 'buttons'),
-        '#tree' => TRUE
-      );
-      panels_add_buttons($form['content'][$area][$id]['buttons'], $count, $position);
-
-      // figure out if one of those buttons was pressed
-      panels_form_builder($form['content'][$area][$id]['buttons']);
-      $deleted = false;
-      foreach ($GLOBALS['form_values']['content'][$area][$id]['buttons'] as $button => $value) {
-        if ($value) {
-          $function = 'panels_move_' . $button;
-          $function($order, $position);
-          $form['content'][$area]['order']['#value'] = serialize($order);
-          if ($button == 'delete')
-          $deleted = true;
-        }
-      }
-      // If a content item was deleted, it still has buttons. Get rid of them.
-      // It had buttons because we needed to give it buttons to see if its
-      // buttons were clicked.
-      if ($deleted) {
-        unset($form['content'][$area][$id]['buttons']);
-      }
-      else {
-        // we finally get to add the conent item's content to the form.
-        $area_record = $panels->content[$area][$id];
-        $form['content'][$area][$id]['type'] = array(
-          '#type' => 'hidden',
-          '#default_value' => $area_record->type,
-          '#parents' => array('content', $area, $id, 'type'),
-        );
-        // retrieve what was already there -- so we can retain edits and
-        // content items that were added.
-        panels_form_builder($form['content'][$area][$id]['type']);
-        $type = $form['content'][$area][$id]['type']['#value'];
-        $function = $content_types[$type]['admin'];
-        if (function_exists($function)) {
-          $array = array(
-            '#tree' => true,
-            '#parents' => array('content', $area, $id, 'configuration'),
-          );
-          $form['content'][$area][$id]['configuration'] = array_merge($array, $function('edit', $area_record->configuration, array('content', $area, $id, 'configuration')));
-          panels_form_builder($form['content'][$area][$id]['configuration']);
-        }        
-      }
-    }
-  }
-
-  $form['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Save'),
-  );  
-
-  return $form;
-}
-
-/**
- * Display the form to edit a panels.
- */
-function theme_panels_edit_form($form) {
-  $layouts = panels_get_layouts();
-  $layout = $layouts[$form['layout']['#value']];
-
-  $content_types = panels_get_content_types();
-
-  $output .= drupal_render($form['info']);
-  foreach ($layout['content areas'] as $area => $title) {
-    $order = unserialize($form['content'][$area]['order']['#value']);
-    if (!$order) {
-      $area_content = t('This area has no content.');
-    }
-    else {
-      $area_content = '';
-      $count = count($order);
-      foreach ($order as $position => $id) {
-        if ($count > 1) {
-          if ($position == 0 ) {
-            panels_set_blank($form['content'][$area][$id]['buttons']['up']);
-          }
-          else if ($position == ($count - 1)) {
-            panels_set_blank($form['content'][$area][$id]['buttons']['down']);
-          }
-        }
-        $type = $form['content'][$area][$id]['type']['#value'];
-        $function = $content_types[$type]['admin'];
-        if (function_exists($function)) {
-          // figure out the actual values; using the global because we need it
-          // to be in the same format it'll be in 'submit'.
-          global $form_values;
-          $conf_form = $form_values['content'][$area][$id]['configuration'];
-          $conf = $function('save', $conf_form);
-          $fieldset = array(
-            '#title' => t('Configure'), 
-            '#children' => drupal_render($form['content'][$area][$id]['configuration']), 
-            '#collapsible' => true, 
-            '#collapsed' => true
-          );
-          $buttons = drupal_render($form['content'][$area][$id]['buttons']);
-          $area_content .= $buttons . '&nbsp;' . $function('list', $conf) . 
-            theme('fieldset', $fieldset)  /* . '<br />' */;
-        }
-      }
-    }
-    $content[$area] = theme('fieldset', array('#title' => check_plain($title), '#value' => $area_content));
-  }
-
-  $output .= panels_get_layout($layout, $content);
-
-  $output .= drupal_render($form);
-  return $output;
-}
-
-function panels_edit_form_validate($form_id, $form_values, $form) {
-  $content_types = panels_get_content_types();
-  foreach ($form_values['content'] as $area => $content) {
-    foreach ($content as $id => $item) {
-      if (is_numeric($id)) {
-        $function = $content_types[$item['type']]['admin'];
-        if (function_exists($function)) {
-          $function('validate', $item['configuration'], $form['content'][$area][$id]['configuration']);
-        }
-      }
-    }
-  }
-}
 
-function panels_edit_form_submit($form_id, $form_values) {
-  $panels = (object) $form_values;
-  // be sure we get the order right.
-  foreach ($form_values['content'] as $area => $content) {
-    $array = array();
-    $order = unserialize($content['order']);
-    if (is_array($order)) {
-      foreach($order as $id) {
-        $array[] = $content[$id];
-      }
-    }
-    $panels->content[$area] = $array;
+  // Read the theme functions from layout templates.
+  $layouts = _panels_get_layouts();
+  $theme_registry_dynamic = array();
+  foreach ($layouts as $layout => $value) {
+    $theme_registry_dynamic['panels_'. $layout] = array('arguments' => array('id','content'));
   }
-  $panels->access = array_keys(array_filter($panels->access));
-  panels_save_panels($panels);
-  drupal_set_message(t('The panels has been saved.'));
-  return 'admin/build/panels';
-}
-
-/**
- * add the buttons to a content item
- */
-function panels_add_buttons(&$form, $count, $position) {
-  $form['delete'] = panels_add_button('user-trash.png', 'delete', t('Delete this item'));
-  // Leaving these in but commented out as I'm not convinced we don't want them.
-//  if ($count > 2) {
-//    $form['top'] = panels_add_button('go-top.png', 'top', t('Move item to top'));
-//  }
-  if ($count > 1) {
-    $form['up'] = panels_add_button('go-up.png', 'up', t('Move item up'));
-    $form['down'] = panels_add_button('go-down.png', 'down', t('Move item down'));
-  }
-//  if ($count > 2) {
-//    $form['bottom'] = panels_add_button('go-bottom.png', 'bottom', t('Move item to bottom'));
-//  }
-//  if ($count > 1) {
-//    $form['spacer'] = panels_add_blank();
-//  }
-  return $form;
-}
-
-/**
- * move an item in an array to the top
- */
-function panels_move_top(&$array, &$position) {
-  $value = $array[$position];
-  unset($array[$position]);
-  array_unshift($array, $value);
-  // reindex the array now
-  $array = array_values($array);
-}
-
-/**
- * move an item in an array to the bottom
- */
-function panels_move_bottom(&$array, &$position) {
-  $value = $array[$position];
-  unset($array[$position]);
-  $array[] = $value;
-  // reindex the array now
-  $array = array_values($array);
-}
-
-/**
- * move an item in an array up one position
- */
-function panels_move_up(&$array, &$position) {
-  $value = $array[$position];
-  $array[$position] = $array[$position - 1];
-  $array[$position - 1] = $value;
-}
-
-/**
- * move an item in an array up one position
- */
-function panels_move_down(&$array, &$position) {
-  $value = $array[$position];
-  $array[$position] = $array[$position + 1];
-  $array[$position + 1] = $value;
-}
 
-/**
- * Remove an item from an array
- */
-function panels_move_delete(&$array, &$position) {
-  unset($array[$position]);
-  // reindex the array now
-  $array = array_values($array);
+  return array_merge($theme_registry_static, $theme_registry_dynamic);
 }
 
 // ---------------------------------------------------------------------------
 // panels database functions
 
-function panels_load_panels($did) {
+function _panels_load_panels($did) {
   $panels = db_fetch_object(db_query("SELECT * FROM {panels_info} WHERE did = %d", $did));
-  if (!$panels) {
+  if (empty($panels)) {
     return NULL;
   }
   $panels->content = array();
   $panels->access = ($panels->access ? explode(', ', $panels->access) : array());
-
+  
   $result = db_query("SELECT * FROM {panels_area} WHERE did = %d ORDER BY area, position", $did);
   while ($area = db_fetch_object($result)) {
     $area->configuration = unserialize($area->configuration);
@@ -690,34 +207,6 @@
   return $panels;
 }
 
-function panels_save_panels($panels) {
-  $panels->access = implode(', ', $panels->access);
-  if ($panels->did) {
-    db_query("UPDATE {panels_info} SET title = '%s', access = '%s', path = '%s', css_id = '%s', layout = '%s' WHERE did = %d", $panels->title, $panels->access, $panels->path, $panels->css_id, $panels->layout, $panels->did);
-    db_query("DELETE FROM {panels_area} WHERE did = %d", $panels->did);
-  }
-  else {
-    $panels->did = db_next_id("{panels_info_id}");
-    // Put this in the form so modules can utilize the did of a new panel.
-    $GLOBALS['form_values']['did'] = $panels->did;
-    db_query("INSERT INTO {panels_info} (did, title, access, path, css_id, layout) VALUES (%d, '%s', '%s', '%s', '%s', '%s')", $panels->did, $panels->title, $panels->access, $panels->path, $panels->css_id, $panels->layout);
-  }
-  foreach ($panels->content as $area => $info) {
-    foreach ($info as $position => $block) {
-      if (is_numeric($position)) { // don't save some random form stuff that may've been here.
-        $block = (object) $block;
-        db_query("INSERT INTO {panels_area} (did, area, type, configuration, position) VALUES(%d, '%s', '%s', '%s', %d)", $panels->did, $area, $block->type, serialize($block->configuration), $position);
-      }
-    }
-  }
-  menu_rebuild();
-}
-
-function panels_delete_panels($panels) {
-  db_query("DELETE FROM {panels_info} WHERE did = %d", $panels->did);
-  db_query("DELETE FROM {panels_area} WHERE did = %d", $panels->did);
-  menu_rebuild();
-}
 // ---------------------------------------------------------------------------
 // panels page
 
@@ -727,7 +216,7 @@
  *
  * @param $set (optional) used internally to set the page status
  */
-function panels_is_panels_page($set_panels = NULL) {
+function _panels_is_panels_page($set_panels = NULL) {
   static $is_panels;
   if ($set_panels == TRUE) {
     $is_panels = $set_panels;
@@ -735,25 +224,27 @@
   return $is_panels;
 }
 
-function panels_panels_page($did) {
-  $panels = panels_load_panels($did);
-  if (!$panels) {
+function _panels_panels_page($did) {
+  $panels = _panels_load_panels($did);
+  if (empty($panels)) {
     return drupal_not_found();
   }
 
-  $layouts = panels_get_layouts();
+  $layouts = _panels_get_layouts();
   $layout = $layouts[$panels->layout];
   $layout['css_id'] = $panels->css_id;
-  
-  if (!$layout) {
-    watchdog('panels', t('Unable to find requested layout %s', array('%s' => check_plain($panels->layout))));
+
+  if (empty($layout)) {
+    watchdog('panels', 'Unable to find requested layout %s', array('%s' => check_plain($panels->layout)));
     return drupal_not_found();
   }
 
-  panels_is_panels_page(TRUE);
-  $content_types = panels_get_content_types();
+  _panels_is_panels_page(TRUE);
+  $content_types = _panels_get_content_types();
 
+  $content = array();
   foreach ($panels->content as $location => $list) {
+    $content[$location] = ''; // E_ALL init for $content[$area->area].
     foreach ($list as $area) {
       $function = $content_types[$area->type]['callback'];
       if (function_exists($function)) {
@@ -761,20 +252,21 @@
       }
     }
   }
-  $output = panels_get_layout($layout, $content);
+  $output = '';
+  $output = _panels_get_layout($layout, $content);
   drupal_set_title(filter_xss_admin($panels->title));
   return $output;
 }
 
-function panels_get_layout($layout, $content) {
-  $output = theme($layout['theme'], check_plain($layout['css_id']), $content);
+function _panels_get_layout($layout, $content) {
+  $output = theme($layout['theme'], check_plain((!empty($layout['css_id']) ? $layout['css_id'] : '')), $content);
 
-  if ($output) {
-    if (file_exists(path_to_theme() . '/' . $layout['css'])) {
-      drupal_add_css(path_to_theme() . '/' . $layout['css']);
+  if (!empty($output)) {
+    if (file_exists(path_to_theme() .'/'. $layout['css'])) {
+      drupal_add_css(path_to_theme() .'/'. $layout['css']);
     }
     else {
-      drupal_add_css(drupal_get_path('module', $layout['module']) . '/' . $layout['css']);
+      drupal_add_css(drupal_get_path('module', $layout['module']) .'/'. $layout['css']);
     }
   }
   return $output;
@@ -785,29 +277,29 @@
  * finished layout.
  */
 function panels_print_layout($id, $content) {
-  $layouts = panels_get_layouts();
+  $layouts = _panels_get_layouts();
   $layout = $layouts[$id];
   if (!$layout) {
     return;
   }
   
-  return panels_get_layout($layout, $content);
+  return _panels_get_layout($layout, $content);
 }
 
 // ---------------------------------------------------------------------------
 // panels data loading
 
-function panels_load_includes($directory, $callback) {
+function _panels_load_includes($directory, $callback) {
   // Load all our module 'on behalfs'.
-  $path = drupal_get_path('module', 'panels') . '/' . $directory;
+  $path = drupal_get_path('module', 'panels') .'/'. $directory;
   $files = drupal_system_listing('.inc$', $path, 'name', 0);
 
-  foreach($files as $file) {
-    require_once('./' . $file->filename);
+  foreach ($files as $file) {
+    require_once('./'. $file->filename);
   }
   $output = module_invoke_all($callback);
   foreach ($files as $file) {
-    $function = 'panels_' . $file->name . '_' . $callback;
+    $function = 'panels_'. $file->name .'_'. $callback;
     if (function_exists($function)) {
       $result = $function();
       if (isset($result) && is_array($result)) {
@@ -818,41 +310,18 @@
   return $output;
 }
 
-function panels_get_layouts() {
-  static $layout = NULL;
-  if (!$layout) {
-    $layouts = panels_load_includes('layouts', 'panels_layouts');
+function _panels_get_layouts() {
+  static $layouts = NULL;
+  if (!$layouts) {
+    $layouts = _panels_load_includes('layouts', 'panels_layouts');
   }
   return $layouts;
 }
 
-function panels_get_content_types() {
-  static $layout = NULL;
-  if (!$layout) {
-    $layouts = panels_load_includes('content_types', 'panels_content_types');
+function _panels_get_content_types() {
+  static $layouts = NULL;
+  if (!$layouts) {
+    $layouts = _panels_load_includes('content_types', 'panels_content_types');
   }
   return $layouts;
 }
-
-/**
- * Helper function for autocompletion of node titles.
- * This is mostly stolen from clipper.
- */
-function panels_node_autocomplete($string) {
-  if ($string != '') { // if there are node_types passed, we'll use those in a MySQL IN query.
-    $result = db_query_range(db_rewrite_sql('SELECT n.title, u.name FROM {node} n INNER JOIN {users} u ON u.uid = n.uid WHERE LOWER(title) LIKE LOWER("%%%s%%")'), $string, 0, 10);
-    $prefix = count($array) ? implode(', ', $array) .', ' : '';
-
-    $matches = array();
-    while ($node = db_fetch_object($result)) {
-      $n = $node->title;
-      // Commas and quotes in terms are special cases, so encode 'em.
-      if (preg_match('/,/', $node->title) || preg_match('/"/', $node->title)) {
-        $n = '"'. preg_replace('/"/', '""', $node->title) .'"';
-      }
-      $matches[$prefix . $n] = '<span class="autocomplete_title">'. check_plain($node->title) .'</span> <span class="autocomplete_user">('. t('by %user', array('%user' => check_plain($node->name))) .')</span>';
-    }
-    print drupal_to_js($matches);
-    exit();
-  }
-}
Index: modules/panels/panels_admin.css
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/panels/panels_admin.css,v
retrieving revision 1.1
diff -u -r1.1 panels_admin.css
--- modules/panels/panels_admin.css	22 Jul 2006 04:36:09 -0000	1.1
+++ modules/panels/panels_admin.css	8 Jan 2008 23:20:00 -0000
@@ -1,14 +1,14 @@
-.layout-link {
-  float: left; 
-  padding: 1em;
-  width: 125px;
-}
-
-.layout-link img {
-  margin-left: auto;
-  margin-right: auto;
-}
-
-.layout-icon {
-  float: right;
+.layout-link {
+  float: left; 
+  padding: 1em;
+  width: 125px;
+}
+
+.layout-link img {
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.layout-icon {
+  float: right;
 }
\ No newline at end of file
Index: modules/panels/INSTALL.txt
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/panels/INSTALL.txt,v
retrieving revision 1.2
diff -u -r1.2 INSTALL.txt
--- modules/panels/INSTALL.txt	22 Jul 2006 06:06:46 -0000	1.2
+++ modules/panels/INSTALL.txt	8 Jan 2008 23:20:00 -0000
@@ -1,13 +1,13 @@
-Simply activate the module. The tables you need will be installed.
-
-Then, go to administer >> panels
-
-Select 'add'.
-
-Choose a layout; a simple one is best if you're just exploring.
-
-Choose a URL for your new panel page. 'panel/test' is good if you're just exploring.
-
-Add some content to each of the areas.
-
-Click save, then click on the URL in the list to see what your new page looks like.
+Simply activate the module. The tables you need will be installed.
+
+Then, go to administer >> panels
+
+Select 'add'.
+
+Choose a layout; a simple one is best if you're just exploring.
+
+Choose a URL for your new panel page. 'panel/test' is good if you're just exploring.
+
+Add some content to each of the areas.
+
+Click save, then click on the URL in the list to see what your new page looks like.
Index: modules/panels/TODO.txt
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/panels/TODO.txt,v
retrieving revision 1.2
diff -u -r1.2 TODO.txt
--- modules/panels/TODO.txt	26 Jul 2006 16:53:40 -0000	1.2
+++ modules/panels/TODO.txt	8 Jan 2008 23:20:00 -0000
@@ -1,12 +1,12 @@
-TODO:
-
-This is a brief list of the things that may still need to be done. No guarantee
-of them ever getting done.
-
-content type: phptemplate
-
-access control to pages
-access control to content types
-
-dashboard node extension
-
+TODO:
+
+This is a brief list of the things that may still need to be done. No guarantee
+of them ever getting done.
+
+content type: phptemplate
+
+access control to pages
+access control to content types
+
+dashboard node extension
+
Index: modules/panels/po/de.po
===================================================================
RCS file: modules/panels/po/de.po
diff -N modules/panels/po/de.po
--- modules/panels/po/de.po	2 Jun 2007 10:38:50 -0000	1.1.2.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,424 +0,0 @@
-# $Id: de.po,v 1.1.2.1 2007/06/02 10:38:50 hass Exp $
-#
-# LANGUAGE translation of Drupal (general)
-# Copyright YEAR NAME <EMAIL@ADDRESS>
-# Generated from files:
-#  panels.module,v 1.10.2.9 2007/03/15 23:13:41 merlinofchaos
-#  fourcol_25_25_25_25.inc,v 1.0 2006/09/02 11:47:00 alexander.hass
-#  threecol_33_33_33.inc,v 1.0 2006/09/02 11:47:00 alexander.hass
-#  twocol_25_75.inc,v 1.0 2006/09/02 11:47:00 alexander.hass
-#  twocol_33_66.inc,v 1.0 2006/09/02 11:47:00 alexander.hass
-#  twocol_38_62.inc,v 1.0 2006/09/02 11:47:00 alexander.hass
-#  twocol_50_50.inc,v 1.0 2006/09/02 11:47:00 alexander.hass
-#  twocol_62_38.inc,v 1.0 2006/09/02 11:47:00 alexander.hass
-#  twocol_66_33.inc,v 1.0 2006/09/02 11:47:00 alexander.hass
-#  twocol_75_25.inc,v 1.0 2006/09/02 11:47:00 alexander.hass
-#  threecol_25_50_25_stacked.inc,v 1.5 2006/08/22 23:54:20 merlinofchaos
-#  threecol_33_34_33.inc,v 1.5 2006/08/22 23:54:20 merlinofchaos
-#  threecol_33_34_33_stacked.inc,v 1.5 2006/08/22 23:54:20 merlinofchaos
-#  twocol.inc,v 1.6 2006/08/22 23:54:20 merlinofchaos
-#  twocol_stacked.inc,v 1.5 2006/08/22 23:54:20 merlinofchaos
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: panels 5.x\n"
-"POT-Creation-Date: 2007-03-24 21:42+0100\n"
-"PO-Revision-Date: 2007-06-02 12:37+0100\n"
-"Last-Translator: Alexander Hass\n"
-"Language-Team: Alexander Hass\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-Language: German\n"
-"X-Poedit-Country: GERMANY\n"
-"X-Poedit-SourceCharset: utf-8\n"
-
-#: panels.module:382
-#: content_types/custom.inc:90
-msgid "CSS ID"
-msgstr "CSS ID"
-
-#: content_types/block.inc:75
-#: content_types/views.inc:123
-msgid "Block"
-msgstr "Block"
-
-#: layouts/threecol_25_50_25.inc:12
-#: layouts/threecol_25_50_25_stacked.inc:14
-#: layouts/threecol_33_34_33.inc:13
-#: layouts/threecol_33_34_33_stacked.inc:14
-#: layouts/twocol.inc:13
-#: layouts/twocol_stacked.inc:14
-msgid "Left side"
-msgstr "Linke Spalte"
-
-#: layouts/threecol_25_50_25.inc:12
-#: layouts/threecol_25_50_25_stacked.inc:14
-#: layouts/threecol_33_34_33.inc:13
-#: layouts/threecol_33_34_33_stacked.inc:14
-msgid "Middle column"
-msgstr "Mittlere Spalte"
-
-#: layouts/threecol_25_50_25.inc:12
-#: layouts/threecol_25_50_25_stacked.inc:14
-#: layouts/threecol_33_34_33.inc:13
-#: layouts/threecol_33_34_33_stacked.inc:14
-#: layouts/twocol.inc:13
-#: layouts/twocol_stacked.inc:14
-msgid "Right side"
-msgstr "Rechte Spalte"
-
-#: layouts/threecol_25_50_25_stacked.inc:14
-#: layouts/threecol_33_34_33_stacked.inc:14
-#: layouts/twocol_stacked.inc:14
-msgid "Top"
-msgstr "Oben"
-
-#: layouts/threecol_25_50_25_stacked.inc:14
-#: layouts/threecol_33_34_33_stacked.inc:14
-#: layouts/twocol_stacked.inc:14
-msgid "Bottom"
-msgstr "Unten"
-
-#: content_types/block.inc:79
-#: ;86
-msgid "Add block"
-msgstr "Block hinzufügen"
-
-#: content_types/block.inc:107
-msgid "Override title"
-msgstr "Titel überschreiben"
-
-#: content_types/block.inc:108
-msgid "If checked, the block title will be overridden with the override title text."
-msgstr "Sobald aktiviert, wird der Blocktitel mit dem Texttitel überschrieben."
-
-#: content_types/block.inc:113
-msgid "Override title text"
-msgstr "Titeltext überschreiben"
-
-#: content_types/custom.inc:50
-msgid "Enter an optional title for custom content you define"
-msgstr "Einen optionalen Titel für benutzerdefinierten Inhalt eingeben"
-
-#: content_types/custom.inc:57
-#: ;64
-msgid "Add custom"
-msgstr "Benutzerdefiniert hinzufügen"
-
-#: content_types/custom.inc:73
-#: ;74
-msgid "Title"
-msgstr "Titel"
-
-#: content_types/custom.inc:78
-msgid "Body"
-msgstr "Textkörper"
-
-#: content_types/custom.inc:91
-msgid "CSS ID of this custom content."
-msgstr "CSS ID dieses benutzerdefinierten Inhaltes."
-
-#: content_types/custom.inc:98
-msgid "CSS class"
-msgstr "CSS Klasse"
-
-#: content_types/custom.inc:99
-msgid "CSS class of this custom content."
-msgstr "CSS Klasse dieses benutzerdefinierten Inhaltes."
-
-#: content_types/node.inc:42
-msgid "Enter the title or NID of a post"
-msgstr "Den Titel oder die NID des Beitrages eingeben"
-
-#: content_types/node.inc:50
-#: ;57
-msgid "Add post"
-msgstr "Beitrag hinzufügen"
-
-#: content_types/node.inc:68
-msgid "Unable to find \"%s\""
-msgstr "„%s“ wurde nicht gefunden"
-
-#: content_types/node.inc:82
-msgid "Teaser"
-msgstr "Anrisstext"
-
-#: content_types/node.inc:85
-msgid "Check here to show only the node teaser"
-msgstr "Aktivieren, um nur den Anrisstext des Beitrages anzuzeigen."
-
-#: content_types/node.inc:90
-msgid "Display links"
-msgstr "Verweise anzeigen"
-
-#: content_types/node.inc:91
-msgid "Check here to display the links with the post."
-msgstr "Aktivieren, um die Verweise mit dem Beitrag anzuzeigen."
-
-#: content_types/node.inc:96
-msgid "Suppress node title"
-msgstr "Beitragstitel unterdrücken"
-
-#: content_types/node.inc:97
-msgid "Check here to suppress the node title."
-msgstr "Aktivieren, um den Beitragstitel zu unterdrücken."
-
-#: layouts/threecol_25_50_25.inc:8
-msgid "Three column 25/50/25"
-msgstr "Drei Spalten 25/50/25"
-
-#: layouts/threecol_25_50_25_stacked.inc:10
-msgid "Three column 25/50/25 stacked"
-msgstr "Drei Spalten 25/50/25 gestapelt"
-
-#: layouts/threecol_33_34_33.inc:9
-msgid "Three column 33/34/33"
-msgstr "Drei Spalten 33/34/33"
-
-#: layouts/threecol_33_34_33_stacked.inc:10
-msgid "Three column 33/34/33 stacked"
-msgstr "Drei Spalten 33/34/33 gestapelt"
-
-#: layouts/twocol.inc:9
-msgid "Two column"
-msgstr "Zwei Spalten"
-
-#: layouts/twocol_stacked.inc:10
-msgid "Two column stacked"
-msgstr "Zwei Spalten gestapelt"
-
-#: panels.module:11
-msgid "<p>You may peruse a list of your current panels layouts and edit them, or click add to create a new page.</p>"
-msgstr "<p>Die Liste der aktuellen Panel Layouts kann überprüft, bearbeitet oder eine neue Seite erstellt werden.</p>"
-
-#: panels.module:13
-msgid "<p>Choose a layout for your new page from the list below.</p>"
-msgstr "<p>Ein Layout für die neue Seite von der unten aufgeführten Liste auswählen.</p>"
-
-#: panels.module:60
-#: panels.info:0
-msgid "Panels"
-msgstr "Panels"
-
-#: panels.module:63
-msgid "Create pages on your site that are 2 or 3 columns"
-msgstr "Seiten mit 2 oder 3 Spalten in der Webseite erstellen"
-
-#: panels.module:67
-msgid "List"
-msgstr "Alle anzeigen"
-
-#: panels.module:75
-#: ;82
-msgid "Add"
-msgstr "Hinzufügen"
-
-#: panels.module:89
-msgid "Edit panels"
-msgstr "Panels bearbeiten"
-
-#: panels.module:96
-msgid "Delete panels"
-msgstr "Panels löschen"
-
-#: panels.module:105
-msgid "Autocomplete node"
-msgstr "Beitrag automatisch vervollständigen"
-
-#: panels.module:199
-msgid "Edit"
-msgstr "Bearbeiten"
-
-#: panels.module:200
-#: ;228
-msgid "Delete"
-msgstr "Löschen"
-
-#: panels.module:205
-msgid "Panel title"
-msgstr "Paneltitel"
-
-#: panels.module:206
-msgid "URL"
-msgstr "URL"
-
-#: panels.module:207
-msgid "Operations"
-msgstr "Operationen"
-
-#: panels.module:225
-msgid "Are you sure you want to delete %title?"
-msgstr "Soll %title wirklich gelöscht werden?"
-
-#: panels.module:227
-msgid "This action cannot be undone."
-msgstr "Diese Aktion kann nicht rückgängig gemacht werden."
-
-#: panels.module:228
-msgid "Cancel"
-msgstr "Abbrechen"
-
-#: panels.module:308
-msgid "Add content"
-msgstr "Inhalt hinzufügen"
-
-#: panels.module:310
-msgid "Select an area to add content to, then select a type of content and click the appropriate button. The content will be added."
-msgstr "Zuerst einen Bereich auswählen zu dem Inhalt hinzugefügt werden soll, dann einen Inhalt auswählen und den entsprechenden Knopf drücken. Der Inhalt wird hinzugefügt."
-
-#: panels.module:319
-msgid "Area"
-msgstr "Bereich"
-
-#: panels.module:358
-msgid "General information"
-msgstr "Allgemeine Information"
-
-#: panels.module:375
-msgid "Page title"
-msgstr "Seitentitel"
-
-#: panels.module:376
-msgid "The page title for this panels layout"
-msgstr "Der Seitentitel für dieses Panels Layout"
-
-#: panels.module:383
-msgid "The CSS ID to apply to this page"
-msgstr "Die CSS ID, welche auf diese Seite angewendet werden soll"
-
-#: panels.module:394
-msgid "Access"
-msgstr "Zugriff"
-
-#: panels.module:397
-msgid "Only the checked roles will be able to see this panel in any form; if no roles are checked, access will not be restricted."
-msgstr "Nur die aktivierten Rollen können dieses Panel in jeglicher Art sehen; Wenn keine Rollen aktiviert sind, wird der Zugriff nicht beschränkt."
-
-#: panels.module:403
-msgid "Path"
-msgstr "Pfad"
-
-#: panels.module:404
-msgid "The URL path to give this page, i.e, path/to/page"
-msgstr "Der URL Pfad den diese Seite erhalten soll, z.b.: pfad/zu/seite"
-
-#: panels.module:508
-msgid "Save"
-msgstr "Speichern"
-
-#: panels.module:527
-msgid "This area has no content."
-msgstr "Dieser Bereich hat keinen Inhalt."
-
-#: panels.module:550
-msgid "Configure"
-msgstr "Konfigurieren"
-
-#: panels.module:599
-msgid "The panels has been saved."
-msgstr "Das Panel wurde gespeichert."
-
-#: panels.module:607
-msgid "Delete this item"
-msgstr "Diesen Beitrag löschen"
-
-#: panels.module:613
-msgid "Move item up"
-msgstr "Beitrag nach oben verschieben"
-
-#: panels.module:614
-msgid "Move item down"
-msgstr "Beitrag nach unten verschieben"
-
-#: panels.module:749
-msgid "Unable to find requested layout %s"
-msgstr "Das Layout %s konnte nicht gefunden werden"
-
-#: panels.module:853
-msgid "by %user"
-msgstr "von %user"
-
-#: panels.module:749
-#: ;0 panels.info:0
-msgid "panels"
-msgstr "panels"
-
-#: panels.module:21
-msgid "create panels"
-msgstr "Panels erstellen"
-
-#: panels.module:21
-msgid "access all panels"
-msgstr "Zugriff auf alle Panels"
-
-#: panels.info:0
-msgid "Create pages that are divided into areas of the page."
-msgstr "Erstelle Seiten, welche in Bereiche der Seite unterteilt sind."
-
-#: content_types/views.inc:86
-msgid "Choose a view from the views module"
-msgstr "Eine Ansicht vom Ansichtenmodul wählen"
-
-#: content_types/views.inc:90
-#: ;97
-msgid "Add view"
-msgstr "Ansicht hinzufügen"
-
-#: content_types/views.inc:121
-msgid "View type"
-msgstr "Ansichtstyp"
-
-#: content_types/views.inc:122
-msgid "Select which type of the view to display."
-msgstr "Den Typ einer Ansicht auswählen, der angezeigt werden soll."
-
-#: content_types/views.inc:123
-msgid "Page"
-msgstr "Seite"
-
-#: content_types/views.inc:123
-msgid "Embedded"
-msgstr "Eingebettet"
-
-#: content_types/views.inc:128
-msgid "Pager ID"
-msgstr "Pager ID"
-
-#: content_types/views.inc:130
-msgid "Select the numeric pager ID to use, or 0 to not have use paging. Select \"1\" if you aren't sure what this means"
-msgstr "Die zu verwendende Seitenreiter ID auswählen, oder 0 um keine Seitenreiter zu verwenden. Bei Unsicherheiten \"1\" wählen."
-
-#: content_types/views.inc:136
-msgid "Posts to Display"
-msgstr "Anzuzeigende Beiträge"
-
-#: content_types/views.inc:138
-msgid "Select the number of posts to display, or 0 to display all results."
-msgstr "Die Anzahl der anzuzeigenden Beiträge auswählen, oder 0 um alle Ergebnisse anzuzeigen."
-
-#: content_types/views.inc:144
-msgid "View arguments"
-msgstr "Argumente anzeigen"
-
-#: content_types/views.inc:146
-msgid "Arguments to send to the view as if they were part of the URL in the form of arg1/arg2/arg3. You can use %0, %1, %2, etc, to use arguments from the actual URL. For example, if your panel URL is foo/bar, and someone hits foo/bar/5 use %2 to get the 5."
-msgstr "Argumente an die Ansicht übergeben, als wenn diese Teil der URL sind, in Form von arg1/arg2/arg3. Um Argumente von der aktuellen URL zu verwenden, kann %0, %1, %2, usw. verwendet werden. Sollte die Panel URL foo/bar lauten und jemand greift auf foo/bar/5 zu, kann %2 verwendet werden, um die 5 zu erhalten."
-
-#: content_types/views.inc:152
-msgid "Override URL"
-msgstr "URL überschreiben"
-
-#: content_types/views.inc:154
-msgid "If this is set, override the View URL; this can sometimes be useful to set to the panel URL"
-msgstr "Sobald aktiviert, wird die Ansichten URL überschrieben; Manchmal kann es sinnvoll sein, die Panel URL einzusetzten."
-
-#: content_types/views.inc:160
-msgid "Display view title"
-msgstr "Ansichtentitel anzeigen"
-
-#: content_types/views.inc:161
-msgid "If checked, the title of the view will be displayed."
-msgstr "Sobald aktiviert, wird der Titel der Ansicht angezeigt."
-
Index: modules/panels/po/panels.pot
===================================================================
RCS file: modules/panels/po/panels.pot
diff -N modules/panels/po/panels.pot
--- modules/panels/po/panels.pot	2 Jun 2007 10:38:29 -0000	1.1.2.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,406 +0,0 @@
-# $Id: panels.pot,v 1.1.2.1 2007/06/02 10:38:29 hass Exp $
-#
-# LANGUAGE translation of Drupal (general)
-# Copyright YEAR NAME <EMAIL@ADDRESS>
-# Generated from files:
-#  panels.module,v 1.10.2.9 2007/03/15 23:13:41 merlinofchaos
-#  threecol_25_50_25_stacked.inc,v 1.5 2006/08/22 23:54:20 merlinofchaos
-#  threecol_33_34_33.inc,v 1.5 2006/08/22 23:54:20 merlinofchaos
-#  threecol_33_34_33_stacked.inc,v 1.5 2006/08/22 23:54:20 merlinofchaos
-#  twocol.inc,v 1.6 2006/08/22 23:54:20 merlinofchaos
-#  twocol_stacked.inc,v 1.5 2006/08/22 23:54:20 merlinofchaos
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PROJECT VERSION\n"
-"POT-Creation-Date: 2007-05-31 20:59+0100\n"
-"PO-Revision-Date: YYYY-mm-DD HH:MM+ZZZZ\n"
-"Last-Translator: NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <EMAIL@ADDRESS>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
-
-#: panels.module:382 content_types/custom.inc:90
-msgid "CSS ID"
-msgstr ""
-
-#: content_types/block.inc:75 content_types/views.inc:123
-msgid "Block"
-msgstr ""
-
-#: layouts/threecol_25_50_25.inc:12 layouts/threecol_25_50_25_stacked.inc:14
-#: layouts/threecol_33_34_33.inc:13 layouts/threecol_33_34_33_stacked.inc:14
-#: layouts/twocol.inc:13 layouts/twocol_stacked.inc:14
-msgid "Left side"
-msgstr ""
-
-#: layouts/threecol_25_50_25.inc:12 layouts/threecol_25_50_25_stacked.inc:14
-#: layouts/threecol_33_34_33.inc:13 layouts/threecol_33_34_33_stacked.inc:14
-msgid "Middle column"
-msgstr ""
-
-#: layouts/threecol_25_50_25.inc:12 layouts/threecol_25_50_25_stacked.inc:14
-#: layouts/threecol_33_34_33.inc:13 layouts/threecol_33_34_33_stacked.inc:14
-#: layouts/twocol.inc:13 layouts/twocol_stacked.inc:14
-msgid "Right side"
-msgstr ""
-
-#: layouts/threecol_25_50_25_stacked.inc:14
-#: layouts/threecol_33_34_33_stacked.inc:14 layouts/twocol_stacked.inc:14
-msgid "Top"
-msgstr ""
-
-#: layouts/threecol_25_50_25_stacked.inc:14
-#: layouts/threecol_33_34_33_stacked.inc:14 layouts/twocol_stacked.inc:14
-msgid "Bottom"
-msgstr ""
-
-#: content_types/block.inc:79;86
-msgid "Add block"
-msgstr ""
-
-#: content_types/block.inc:107
-msgid "Override title"
-msgstr ""
-
-#: content_types/block.inc:108
-msgid ""
-"If checked, the block title will be overridden with the override title text."
-msgstr ""
-
-#: content_types/block.inc:113
-msgid "Override title text"
-msgstr ""
-
-#: content_types/custom.inc:50
-msgid "Enter an optional title for custom content you define"
-msgstr ""
-
-#: content_types/custom.inc:57;64
-msgid "Add custom"
-msgstr ""
-
-#: content_types/custom.inc:73;74
-msgid "Title"
-msgstr ""
-
-#: content_types/custom.inc:78
-msgid "Body"
-msgstr ""
-
-#: content_types/custom.inc:91
-msgid "CSS ID of this custom content."
-msgstr ""
-
-#: content_types/custom.inc:98
-msgid "CSS class"
-msgstr ""
-
-#: content_types/custom.inc:99
-msgid "CSS class of this custom content."
-msgstr ""
-
-#: content_types/node.inc:42
-msgid "Enter the title or NID of a post"
-msgstr ""
-
-#: content_types/node.inc:50;57
-msgid "Add post"
-msgstr ""
-
-#: content_types/node.inc:68
-msgid "Unable to find \"%s\""
-msgstr ""
-
-#: content_types/node.inc:82
-msgid "Teaser"
-msgstr ""
-
-#: content_types/node.inc:85
-msgid "Check here to show only the node teaser"
-msgstr ""
-
-#: content_types/node.inc:90
-msgid "Display links"
-msgstr ""
-
-#: content_types/node.inc:91
-msgid "Check here to display the links with the post."
-msgstr ""
-
-#: content_types/node.inc:96
-msgid "Suppress node title"
-msgstr ""
-
-#: content_types/node.inc:97
-msgid "Check here to suppress the node title."
-msgstr ""
-
-#: layouts/threecol_25_50_25.inc:8
-msgid "Three column 25/50/25"
-msgstr ""
-
-#: layouts/threecol_25_50_25_stacked.inc:10
-msgid "Three column 25/50/25 stacked"
-msgstr ""
-
-#: layouts/threecol_33_34_33.inc:9
-msgid "Three column 33/34/33"
-msgstr ""
-
-#: layouts/threecol_33_34_33_stacked.inc:10
-msgid "Three column 33/34/33 stacked"
-msgstr ""
-
-#: layouts/twocol.inc:9
-msgid "Two column"
-msgstr ""
-
-#: layouts/twocol_stacked.inc:10
-msgid "Two column stacked"
-msgstr ""
-
-#: panels.module:11
-msgid ""
-"<p>You may peruse a list of your current panels layouts and edit them, or "
-"click add to create a new page.</p>"
-msgstr ""
-
-#: panels.module:13
-msgid "<p>Choose a layout for your new page from the list below.</p>"
-msgstr ""
-
-#: panels.module:60 panels.info:0
-msgid "Panels"
-msgstr ""
-
-#: panels.module:63
-msgid "Create pages on your site that are 2 or 3 columns"
-msgstr ""
-
-#: panels.module:67
-msgid "List"
-msgstr ""
-
-#: panels.module:75;82
-msgid "Add"
-msgstr ""
-
-#: panels.module:89
-msgid "Edit panels"
-msgstr ""
-
-#: panels.module:96
-msgid "Delete panels"
-msgstr ""
-
-#: panels.module:105
-msgid "Autocomplete node"
-msgstr ""
-
-#: panels.module:199
-msgid "Edit"
-msgstr ""
-
-#: panels.module:200;228
-msgid "Delete"
-msgstr ""
-
-#: panels.module:205
-msgid "Panel title"
-msgstr ""
-
-#: panels.module:206
-msgid "URL"
-msgstr ""
-
-#: panels.module:207
-msgid "Operations"
-msgstr ""
-
-#: panels.module:225
-msgid "Are you sure you want to delete %title?"
-msgstr ""
-
-#: panels.module:227
-msgid "This action cannot be undone."
-msgstr ""
-
-#: panels.module:228
-msgid "Cancel"
-msgstr ""
-
-#: panels.module:308
-msgid "Add content"
-msgstr ""
-
-#: panels.module:310
-msgid ""
-"Select an area to add content to, then select a type of content and click "
-"the appropriate button. The content will be added."
-msgstr ""
-
-#: panels.module:319
-msgid "Area"
-msgstr ""
-
-#: panels.module:358
-msgid "General information"
-msgstr ""
-
-#: panels.module:375
-msgid "Page title"
-msgstr ""
-
-#: panels.module:376
-msgid "The page title for this panels layout"
-msgstr ""
-
-#: panels.module:383
-msgid "The CSS ID to apply to this page"
-msgstr ""
-
-#: panels.module:394
-msgid "Access"
-msgstr ""
-
-#: panels.module:397
-msgid ""
-"Only the checked roles will be able to see this panel in any form; if no "
-"roles are checked, access will not be restricted."
-msgstr ""
-
-#: panels.module:403
-msgid "Path"
-msgstr ""
-
-#: panels.module:404
-msgid "The URL path to give this page, i.e, path/to/page"
-msgstr ""
-
-#: panels.module:508
-msgid "Save"
-msgstr ""
-
-#: panels.module:527
-msgid "This area has no content."
-msgstr ""
-
-#: panels.module:550
-msgid "Configure"
-msgstr ""
-
-#: panels.module:599
-msgid "The panels has been saved."
-msgstr ""
-
-#: panels.module:607
-msgid "Delete this item"
-msgstr ""
-
-#: panels.module:613
-msgid "Move item up"
-msgstr ""
-
-#: panels.module:614
-msgid "Move item down"
-msgstr ""
-
-#: panels.module:749
-msgid "Unable to find requested layout %s"
-msgstr ""
-
-#: panels.module:853
-msgid "by %user"
-msgstr ""
-
-#: panels.module:749;0 panels.info:0
-msgid "panels"
-msgstr ""
-
-#: panels.module:21
-msgid "create panels"
-msgstr ""
-
-#: panels.module:21
-msgid "access all panels"
-msgstr ""
-
-#: panels.info:0
-msgid "Create pages that are divided into areas of the page."
-msgstr ""
-
-#: content_types/views.inc:86
-msgid "Choose a view from the views module"
-msgstr ""
-
-#: content_types/views.inc:90;97
-msgid "Add view"
-msgstr ""
-
-#: content_types/views.inc:121
-msgid "View type"
-msgstr ""
-
-#: content_types/views.inc:122
-msgid "Select which type of the view to display."
-msgstr ""
-
-#: content_types/views.inc:123
-msgid "Page"
-msgstr ""
-
-#: content_types/views.inc:123
-msgid "Embedded"
-msgstr ""
-
-#: content_types/views.inc:128
-msgid "Pager ID"
-msgstr ""
-
-#: content_types/views.inc:130
-msgid ""
-"Select the numeric pager ID to use, or 0 to not have use paging. Select \"1"
-"\" if you aren't sure what this means"
-msgstr ""
-
-#: content_types/views.inc:136
-msgid "Posts to Display"
-msgstr ""
-
-#: content_types/views.inc:138
-msgid "Select the number of posts to display, or 0 to display all results."
-msgstr ""
-
-#: content_types/views.inc:144
-msgid "View arguments"
-msgstr ""
-
-#: content_types/views.inc:146
-msgid ""
-"Arguments to send to the view as if they were part of the URL in the form of "
-"arg1/arg2/arg3. You can use %0, %1, %2, etc, to use arguments from the "
-"actual URL. For example, if your panel URL is foo/bar, and someone hits foo/"
-"bar/5 use %2 to get the 5."
-msgstr ""
-
-#: content_types/views.inc:152
-msgid "Override URL"
-msgstr ""
-
-#: content_types/views.inc:154
-msgid ""
-"If this is set, override the View URL; this can sometimes be useful to set "
-"to the panel URL"
-msgstr ""
-
-#: content_types/views.inc:160
-msgid "Display view title"
-msgstr ""
-
-#: content_types/views.inc:161
-msgid "If checked, the title of the view will be displayed."
-msgstr ""
Index: modules/panels/po/da.po
===================================================================
RCS file: modules/panels/po/da.po
diff -N modules/panels/po/da.po
--- modules/panels/po/da.po	12 Sep 2007 13:37:16 -0000	1.1.2.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,396 +0,0 @@
-# Danish translation of Drupal (panels.module)
-# Copyright 2007 Morten Wulff <wulff@ratatosk.net>
-msgid ""
-msgstr ""
-"Project-Id-Version: Danish translation of Drupal (panels.module) $Id: da.po,v 1.1.2.1 2007/09/12 13:37:16 wulff Exp $\n"
-"POT-Creation-Date: 2007-09-12 13:59+0200\n"
-"PO-Revision-Date: 2007-09-12 15:36+0100\n"
-"Last-Translator: Morten Wulff <wulff@ratatosk.net>\n"
-"Language-Team: Danish <l10n@drupaldanmark.dk>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-Language: Danish\n"
-"X-Poedit-Country: DENMARK\n"
-
-#: panels.module:11
-msgid "<p>You may peruse a list of your current panels layouts and edit them, or click add to create a new page.</p>"
-msgstr "<p>Du kan gennemse en liste af eksiterende paneler eller klikke for at tilføje en ny side.</p>"
-
-#: panels.module:13
-msgid "<p>Choose a layout for your new page from the list below.</p>"
-msgstr "<p>Vælg et layout fra listen herunder.</p>"
-
-#: panels.module:60
-#: panels.info:0
-msgid "Panels"
-msgstr "Paneler"
-
-#: panels.module:63
-msgid "Create pages on your site that are 2 or 3 columns"
-msgstr "Opret sider der har 2 eller 3 spalter"
-
-#: panels.module:67
-msgid "List"
-msgstr "Vis"
-
-#: panels.module:75;82
-msgid "Add"
-msgstr "Tilføj"
-
-#: panels.module:89
-msgid "Edit panels"
-msgstr "Rediger paneler"
-
-#: panels.module:96
-msgid "Delete panels"
-msgstr "Slet paneler"
-
-#: panels.module:105
-msgid "Autocomplete node"
-msgstr "Autofuldfør indholdselement"
-
-#: panels.module:199
-msgid "Edit"
-msgstr "Rediger"
-
-#: panels.module:200;228
-msgid "Delete"
-msgstr "Slet"
-
-#: panels.module:205
-msgid "Panel title"
-msgstr "Paneltitel"
-
-#: panels.module:206
-msgid "URL"
-msgstr "URL"
-
-#: panels.module:207
-msgid "Operations"
-msgstr "Handlinger"
-
-#: panels.module:225
-msgid "Are you sure you want to delete %title?"
-msgstr "Ønsker du at slette %title?"
-
-#: panels.module:227
-msgid "This action cannot be undone."
-msgstr "Denne handling kan ikke fortrydes."
-
-#: panels.module:228
-msgid "Cancel"
-msgstr "Annuller"
-
-#: panels.module:308
-msgid "Add content"
-msgstr "Tilføj indhold"
-
-#: panels.module:310
-msgid "Select an area to add content to, then select a type of content and click the appropriate button. The content will be added."
-msgstr "Vælg hvilket område du vil føje indhold til, vælg hvilken type du vil tilføje og klik på den relevante knap."
-
-#: panels.module:319
-msgid "Area"
-msgstr "Område"
-
-#: panels.module:358
-msgid "General information"
-msgstr "Generel information"
-
-#: panels.module:375
-msgid "Page title"
-msgstr "Sidetitel"
-
-#: panels.module:376
-msgid "The page title for this panels layout"
-msgstr "Panelets sidetitel"
-
-#: panels.module:382
-#: content_types/custom.inc:90
-msgid "CSS ID"
-msgstr "CSS ID"
-
-#: panels.module:383
-msgid "The CSS ID to apply to this page"
-msgstr "Sidens CSS ID"
-
-#: panels.module:394
-msgid "Access"
-msgstr "Adgang"
-
-#: panels.module:397
-msgid "Only the checked roles will be able to see this panel in any form; if no roles are checked, access will not be restricted."
-msgstr "Kun de valgte rolle kan se panelet. Hvis ingen roller er valgt har alle adgang."
-
-#: panels.module:403
-msgid "Path"
-msgstr "Sti"
-
-#: panels.module:404
-msgid "The URL path to give this page, i.e, path/to/page"
-msgstr "Sidens URL (f.eks. sti/til/side)"
-
-#: panels.module:508
-msgid "Save"
-msgstr "Gem"
-
-#: panels.module:527
-msgid "This area has no content."
-msgstr "Området har intet indhold."
-
-#: panels.module:550
-msgid "Configure"
-msgstr "Konfigurer"
-
-#: panels.module:599
-msgid "The panels has been saved."
-msgstr "Paneler gemt."
-
-#: panels.module:607
-msgid "Delete this item"
-msgstr "Slet element"
-
-#: panels.module:613
-msgid "Move item up"
-msgstr "Flyt element op"
-
-#: panels.module:614
-msgid "Move item down"
-msgstr "Flyt element ned"
-
-#: panels.module:749
-msgid "Unable to find requested layout %s"
-msgstr "Kan ikke finde layoutet %s"
-
-#: panels.module:853
-msgid "by %user"
-msgstr "af %user"
-
-#: panels.module:749;0
-msgid "panels"
-msgstr "paneler"
-
-#: panels.module:21
-msgid "create panels"
-msgstr "opret paneler"
-
-#: panels.module:21
-msgid "access all panels"
-msgstr "tilgå alle paneler"
-
-#: panels.info:0
-msgid "Create pages that are divided into areas of the page."
-msgstr "Opret sider der er inddelt i underområdet."
-
-#: content_types/block.inc:75
-#: content_types/views.inc:123
-msgid "Block"
-msgstr "Blok"
-
-#: content_types/block.inc:79;86
-msgid "Add block"
-msgstr "Tilføj blok"
-
-#: content_types/block.inc:107
-msgid "Override title"
-msgstr "Tilsidesæt titel"
-
-#: content_types/block.inc:108
-msgid "If checked, the block title will be overridden with the override title text."
-msgstr "Erstat bloktitlen med teksten i \"tilsidesæt titel\"."
-
-#: content_types/block.inc:113
-msgid "Override title text"
-msgstr "Tilsidesæt titeltekst"
-
-#: content_types/custom.inc:50
-msgid "Enter an optional title for custom content you define"
-msgstr "Indtast en titel for tilpasset indhold"
-
-#: content_types/custom.inc:57;64
-msgid "Add custom"
-msgstr "Tilføj tilpasset"
-
-#: content_types/custom.inc:73;74
-msgid "Title"
-msgstr "Titel"
-
-#: content_types/custom.inc:78
-msgid "Body"
-msgstr "Indhold"
-
-#: content_types/custom.inc:91
-msgid "CSS ID of this custom content."
-msgstr "CSS ID for tilpasset indhold."
-
-#: content_types/custom.inc:98
-msgid "CSS class"
-msgstr "CSS klasse"
-
-#: content_types/custom.inc:99
-msgid "CSS class of this custom content."
-msgstr "CSS klasse for tilpasset indhold."
-
-#: content_types/node.inc:42
-msgid "Enter the title or NID of a post"
-msgstr "Indtast node ID for indlæg"
-
-#: content_types/node.inc:50;57
-msgid "Add post"
-msgstr "Tilføj indlæg"
-
-#: content_types/node.inc:68
-msgid "Unable to find \"%s\""
-msgstr "Kan ikke finde \"%s\""
-
-#: content_types/node.inc:82
-msgid "Teaser"
-msgstr "Smagsprøve"
-
-#: content_types/node.inc:85
-msgid "Check here to show only the node teaser"
-msgstr "Vis kun smagsprøver"
-
-#: content_types/node.inc:90
-msgid "Display links"
-msgstr "Vis links"
-
-#: content_types/node.inc:91
-msgid "Check here to display the links with the post."
-msgstr "Vis links"
-
-#: content_types/node.inc:96
-msgid "Suppress node title"
-msgstr "Skjul titel"
-
-#: content_types/node.inc:97
-msgid "Check here to suppress the node title."
-msgstr "Skjul titel"
-
-#: content_types/views.inc:86
-msgid "Choose a view from the views module"
-msgstr "Vælg en visning"
-
-#: content_types/views.inc:90;97
-msgid "Add view"
-msgstr "Tilføj visning"
-
-#: content_types/views.inc:121
-msgid "View type"
-msgstr "Visningstype"
-
-#: content_types/views.inc:122
-msgid "Select which type of the view to display."
-msgstr "Vælg hvilken udgave af visning der skal vises."
-
-#: content_types/views.inc:123
-msgid "Page"
-msgstr "Side"
-
-#: content_types/views.inc:123
-msgid "Embedded"
-msgstr "Indlejret"
-
-#: content_types/views.inc:128
-msgid "Pager ID"
-msgstr "Sideskifter-ID"
-
-#: content_types/views.inc:130
-msgid "Select the numeric pager ID to use, or 0 to not have use paging. Select \"1\" if you aren't sure what this means"
-msgstr "Vælg et numerisk sideskifter-ID, eller angiv 0 for ikke at bruge sideskift. Vælg \"1\" hvis du er i tvivl om hvad dette betyder."
-
-#: content_types/views.inc:136
-msgid "Posts to Display"
-msgstr "Antal indlæg"
-
-#: content_types/views.inc:138
-msgid "Select the number of posts to display, or 0 to display all results."
-msgstr "Vælg hvor mange indlæg der skal vises, eller 0 for at vise alle indlæg."
-
-#: content_types/views.inc:144
-msgid "View arguments"
-msgstr "Argumenter til visning"
-
-#: content_types/views.inc:146
-msgid "Arguments to send to the view as if they were part of the URL in the form of arg1/arg2/arg3. You can use %0, %1, %2, etc, to use arguments from the actual URL. For example, if your panel URL is foo/bar, and someone hits foo/bar/5 use %2 to get the 5."
-msgstr "Argumenter der skal sendes til visningen som om de er en del af URLen på formen arg1/arg2/arg3. Du kan bruge %0, %1, %2, osv. for at bruge argumenter fra den aktuelle URL."
-
-#: content_types/views.inc:152
-msgid "Override URL"
-msgstr "Tilsidesæt URL"
-
-#: content_types/views.inc:154
-msgid "If this is set, override the View URL; this can sometimes be useful to set to the panel URL"
-msgstr "Tilsidesæt visnings-URL; det kan nogle gange være nyttigt at bruge panel-URLen i stedet."
-
-#: content_types/views.inc:160
-msgid "Display view title"
-msgstr "Vis titel på visning"
-
-#: content_types/views.inc:161
-msgid "If checked, the title of the view will be displayed."
-msgstr "Vis visningens titel."
-
-#: layouts/threecol_25_50_25.inc:8
-msgid "Three column 25/50/25"
-msgstr "Tre spalter 25/50/25"
-
-#: layouts/threecol_25_50_25.inc:12
-#: layouts/threecol_25_50_25_stacked.inc:14
-#: layouts/threecol_33_34_33.inc:13
-#: layouts/threecol_33_34_33_stacked.inc:14
-#: layouts/twocol.inc:13
-#: layouts/twocol_stacked.inc:14
-msgid "Left side"
-msgstr "Venstre side"
-
-#: layouts/threecol_25_50_25.inc:12
-#: layouts/threecol_25_50_25_stacked.inc:14
-#: layouts/threecol_33_34_33.inc:13
-#: layouts/threecol_33_34_33_stacked.inc:14
-msgid "Middle column"
-msgstr "Midterste spalte"
-
-#: layouts/threecol_25_50_25.inc:12
-#: layouts/threecol_25_50_25_stacked.inc:14
-#: layouts/threecol_33_34_33.inc:13
-#: layouts/threecol_33_34_33_stacked.inc:14
-#: layouts/twocol.inc:13
-#: layouts/twocol_stacked.inc:14
-msgid "Right side"
-msgstr "Højre side"
-
-#: layouts/threecol_25_50_25_stacked.inc:10
-msgid "Three column 25/50/25 stacked"
-msgstr "Tre spalter 25/50/25 stablet"
-
-#: layouts/threecol_25_50_25_stacked.inc:14
-#: layouts/threecol_33_34_33_stacked.inc:14
-#: layouts/twocol_stacked.inc:14
-msgid "Top"
-msgstr "Top"
-
-#: layouts/threecol_25_50_25_stacked.inc:14
-#: layouts/threecol_33_34_33_stacked.inc:14
-#: layouts/twocol_stacked.inc:14
-msgid "Bottom"
-msgstr "Bund"
-
-#: layouts/threecol_33_34_33.inc:9
-msgid "Three column 33/34/33"
-msgstr "Tre spalter 33/34/33"
-
-#: layouts/threecol_33_34_33_stacked.inc:10
-msgid "Three column 33/34/33 stacked"
-msgstr "Tre spalter 33/34/33 stablet"
-
-#: layouts/twocol.inc:9
-msgid "Two column"
-msgstr "To spalter"
-
-#: layouts/twocol_stacked.inc:10
-msgid "Two column stacked"
-msgstr "To spalter stablet"
-
Index: modules/panels/LICENSE.txt
===================================================================
RCS file: modules/panels/LICENSE.txt
diff -N modules/panels/LICENSE.txt
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ modules/panels/LICENSE.txt	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,274 @@
+GNU GENERAL PUBLIC LICENSE
+
+              Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave,
+Cambridge, MA 02139, USA. Everyone is permitted to copy and distribute
+verbatim copies of this license document, but changing it is not allowed.
+
+                  Preamble
+
+The licenses for most software are designed to take away your freedom to
+share and change it. By contrast, the GNU General Public License is
+intended to guarantee your freedom to share and change free software--to
+make sure the software is free for all its users. This General Public License
+applies to most of the Free Software Foundation's software and to any other
+program whose authors commit to using it. (Some other Free Software
+Foundation software is covered by the GNU Library General Public License
+instead.) You can apply it to your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our
+General Public Licenses are designed to make sure that you have the
+freedom to distribute copies of free software (and charge for this service if
+you wish), that you receive source code or can get it if you want it, that you
+can change the software or use pieces of it in new free programs; and that
+you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to
+deny you these rights or to ask you to surrender the rights. These restrictions
+translate to certain responsibilities for you if you distribute copies of the
+software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether gratis or for
+a fee, you must give the recipients all the rights that you have. You must make
+sure that they, too, receive or can get the source code. And you must show
+them these terms so they know their rights.
+
+We protect your rights with two steps: (1) copyright the software, and (2)
+offer you this license which gives you legal permission to copy, distribute
+and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain that
+everyone understands that there is no warranty for this free software. If the
+software is modified by someone else and passed on, we want its recipients
+to know that what they have is not the original, so that any problems
+introduced by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents. We
+wish to avoid the danger that redistributors of a free program will individually
+obtain patent licenses, in effect making the program proprietary. To prevent
+this, we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and modification
+follow.
+
+           GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND
+               MODIFICATION
+
+0. This License applies to any program or other work which contains a notice
+placed by the copyright holder saying it may be distributed under the terms
+of this General Public License. The "Program", below, refers to any such
+program or work, and a "work based on the Program" means either the
+Program or any derivative work under copyright law: that is to say, a work
+containing the Program or a portion of it, either verbatim or with
+modifications and/or translated into another language. (Hereinafter, translation
+is included without limitation in the term "modification".) Each licensee is
+addressed as "you".
+
+Activities other than copying, distribution and modification are not covered
+by this License; they are outside its scope. The act of running the Program is
+not restricted, and the output from the Program is covered only if its contents
+constitute a work based on the Program (independent of having been made
+by running the Program). Whether that is true depends on what the Program
+does.
+
+1. You may copy and distribute verbatim copies of the Program's source
+code as you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this License
+and to the absence of any warranty; and give any other recipients of the
+Program a copy of this License along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you
+may at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Program or any portion of it,
+thus forming a work based on the Program, and copy and distribute such
+modifications or work under the terms of Section 1 above, provided that you
+also meet all of these conditions:
+
+a) You must cause the modified files to carry prominent notices stating that
+you changed the files and the date of any change.
+
+b) You must cause any work that you distribute or publish, that in whole or in
+part contains or is derived from the Program or any part thereof, to be
+licensed as a whole at no charge to all third parties under the terms of this
+License.
+
+c) If the modified program normally reads commands interactively when run,
+you must cause it, when started running for such interactive use in the most
+ordinary way, to print or display an announcement including an appropriate
+copyright notice and a notice that there is no warranty (or else, saying that
+you provide a warranty) and that users may redistribute the program under
+these conditions, and telling the user how to view a copy of this License.
+(Exception: if the Program itself is interactive but does not normally print such
+an announcement, your work based on the Program is not required to print
+an announcement.)
+
+These requirements apply to the modified work as a whole. If identifiable
+sections of that work are not derived from the Program, and can be
+reasonably considered independent and separate works in themselves, then
+this License, and its terms, do not apply to those sections when you distribute
+them as separate works. But when you distribute the same sections as part
+of a whole which is a work based on the Program, the distribution of the
+whole must be on the terms of this License, whose permissions for other
+licensees extend to the entire whole, and thus to each and every part
+regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your rights to
+work written entirely by you; rather, the intent is to exercise the right to
+control the distribution of derivative or collective works based on the
+Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of a
+storage or distribution medium does not bring the other work under the scope
+of this License.
+
+3. You may copy and distribute the Program (or a work based on it, under
+Section 2) in object code or executable form under the terms of Sections 1
+and 2 above provided that you also do one of the following:
+
+a) Accompany it with the complete corresponding machine-readable source
+code, which must be distributed under the terms of Sections 1 and 2 above
+on a medium customarily used for software interchange; or,
+
+b) Accompany it with a written offer, valid for at least three years, to give
+any third party, for a charge no more than your cost of physically performing
+source distribution, a complete machine-readable copy of the corresponding
+source code, to be distributed under the terms of Sections 1 and 2 above on
+a medium customarily used for software interchange; or,
+
+c) Accompany it with the information you received as to the offer to distribute
+corresponding source code. (This alternative is allowed only for
+noncommercial distribution and only if you received the program in object
+code or executable form with such an offer, in accord with Subsection b
+above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source code
+means all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation and
+installation of the executable. However, as a special exception, the source
+code distributed need not include anything that is normally distributed (in
+either source or binary form) with the major components (compiler, kernel,
+and so on) of the operating system on which the executable runs, unless that
+component itself accompanies the executable.
+
+If distribution of executable or object code is made by offering access to
+copy from a designated place, then offering equivalent access to copy the
+source code from the same place counts as distribution of the source code,
+even though third parties are not compelled to copy the source along with the
+object code.
+
+4. You may not copy, modify, sublicense, or distribute the Program except as
+expressly provided under this License. Any attempt otherwise to copy,
+modify, sublicense or distribute the Program is void, and will automatically
+terminate your rights under this License. However, parties who have received
+copies, or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+5. You are not required to accept this License, since you have not signed it.
+However, nothing else grants you permission to modify or distribute the
+Program or its derivative works. These actions are prohibited by law if you
+do not accept this License. Therefore, by modifying or distributing the
+Program (or any work based on the Program), you indicate your acceptance
+of this License to do so, and all its terms and conditions for copying,
+distributing or modifying the Program or works based on it.
+
+6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the original
+licensor to copy, distribute or modify the Program subject to these terms and
+conditions. You may not impose any further restrictions on the recipients'
+exercise of the rights granted herein. You are not responsible for enforcing
+compliance by third parties to this License.
+
+7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues), conditions
+are imposed on you (whether by court order, agreement or otherwise) that
+contradict the conditions of this License, they do not excuse you from the
+conditions of this License. If you cannot distribute so as to satisfy
+simultaneously your obligations under this License and any other pertinent
+obligations, then as a consequence you may not distribute the Program at all.
+For example, if a patent license would not permit royalty-free redistribution
+of the Program by all those who receive copies directly or indirectly through
+you, then the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply and
+the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or
+other property right claims or to contest validity of any such claims; this
+section has the sole purpose of protecting the integrity of the free software
+distribution system, which is implemented by public license practices. Many
+people have made generous contributions to the wide range of software
+distributed through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing to
+distribute software through any other system and a licensee cannot impose
+that choice.
+
+This section is intended to make thoroughly clear what is believed to be a
+consequence of the rest of this License.
+
+8. If the distribution and/or use of the Program is restricted in certain
+countries either by patents or by copyrighted interfaces, the original copyright
+holder who places the Program under this License may add an explicit
+geographical distribution limitation excluding those countries, so that
+distribution is permitted only in or among countries not thus excluded. In such
+case, this License incorporates the limitation as if written in the body of this
+License.
+
+9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will be
+similar in spirit to the present version, but may differ in detail to address new
+problems or concerns.
+
+Each version is given a distinguishing version number. If the Program specifies
+a version number of this License which applies to it and "any later version",
+you have the option of following the terms and conditions either of that
+version or of any later version published by the Free Software Foundation. If
+the Program does not specify a version number of this License, you may
+choose any version ever published by the Free Software Foundation.
+
+10. If you wish to incorporate parts of the Program into other free programs
+whose distribution conditions are different, write to the author to ask for
+permission. For software which is copyrighted by the Free Software
+Foundation, write to the Free Software Foundation; we sometimes make
+exceptions for this. Our decision will be guided by the two goals of
+preserving the free status of all derivatives of our free software and of
+promoting the sharing and reuse of software generally.
+
+               NO WARRANTY
+
+11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE,
+THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT
+PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
+STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
+WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
+PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
+NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR
+AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR
+ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
+LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL,
+SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
+ARISING OUT OF THE USE OR INABILITY TO USE THE
+PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA
+OR DATA BEING RENDERED INACCURATE OR LOSSES
+SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE
+PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN
+IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.
+
+          END OF TERMS AND CONDITIONS
Index: modules/panels/translations/da.po
===================================================================
RCS file: modules/panels/translations/da.po
diff -N modules/panels/translations/da.po
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ modules/panels/translations/da.po	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,396 @@
+# Danish translation of Drupal (panels.module)
+# Copyright 2007 Morten Wulff <wulff@ratatosk.net>
+msgid ""
+msgstr ""
+"Project-Id-Version: Danish translation of Drupal (panels.module) $Id: da.po,v 1.1.2.1 2007/09/12 13:37:16 wulff Exp $\n"
+"POT-Creation-Date: 2007-09-12 13:59+0200\n"
+"PO-Revision-Date: 2007-09-12 15:36+0100\n"
+"Last-Translator: Morten Wulff <wulff@ratatosk.net>\n"
+"Language-Team: Danish <l10n@drupaldanmark.dk>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Poedit-Language: Danish\n"
+"X-Poedit-Country: DENMARK\n"
+
+#: panels.module:11
+msgid "<p>You may peruse a list of your current panels layouts and edit them, or click add to create a new page.</p>"
+msgstr "<p>Du kan gennemse en liste af eksiterende paneler eller klikke for at tilføje en ny side.</p>"
+
+#: panels.module:13
+msgid "<p>Choose a layout for your new page from the list below.</p>"
+msgstr "<p>Vælg et layout fra listen herunder.</p>"
+
+#: panels.module:60
+#: panels.info:0
+msgid "Panels"
+msgstr "Paneler"
+
+#: panels.module:63
+msgid "Create pages on your site that are 2 or 3 columns"
+msgstr "Opret sider der har 2 eller 3 spalter"
+
+#: panels.module:67
+msgid "List"
+msgstr "Vis"
+
+#: panels.module:75;82
+msgid "Add"
+msgstr "Tilføj"
+
+#: panels.module:89
+msgid "Edit panels"
+msgstr "Rediger paneler"
+
+#: panels.module:96
+msgid "Delete panels"
+msgstr "Slet paneler"
+
+#: panels.module:105
+msgid "Autocomplete node"
+msgstr "Autofuldfør indholdselement"
+
+#: panels.module:199
+msgid "Edit"
+msgstr "Rediger"
+
+#: panels.module:200;228
+msgid "Delete"
+msgstr "Slet"
+
+#: panels.module:205
+msgid "Panel title"
+msgstr "Paneltitel"
+
+#: panels.module:206
+msgid "URL"
+msgstr "URL"
+
+#: panels.module:207
+msgid "Operations"
+msgstr "Handlinger"
+
+#: panels.module:225
+msgid "Are you sure you want to delete %title?"
+msgstr "Ønsker du at slette %title?"
+
+#: panels.module:227
+msgid "This action cannot be undone."
+msgstr "Denne handling kan ikke fortrydes."
+
+#: panels.module:228
+msgid "Cancel"
+msgstr "Annuller"
+
+#: panels.module:308
+msgid "Add content"
+msgstr "Tilføj indhold"
+
+#: panels.module:310
+msgid "Select an area to add content to, then select a type of content and click the appropriate button. The content will be added."
+msgstr "Vælg hvilket område du vil føje indhold til, vælg hvilken type du vil tilføje og klik på den relevante knap."
+
+#: panels.module:319
+msgid "Area"
+msgstr "Område"
+
+#: panels.module:358
+msgid "General information"
+msgstr "Generel information"
+
+#: panels.module:375
+msgid "Page title"
+msgstr "Sidetitel"
+
+#: panels.module:376
+msgid "The page title for this panels layout"
+msgstr "Panelets sidetitel"
+
+#: panels.module:382
+#: content_types/custom.inc:90
+msgid "CSS ID"
+msgstr "CSS ID"
+
+#: panels.module:383
+msgid "The CSS ID to apply to this page"
+msgstr "Sidens CSS ID"
+
+#: panels.module:394
+msgid "Access"
+msgstr "Adgang"
+
+#: panels.module:397
+msgid "Only the checked roles will be able to see this panel in any form; if no roles are checked, access will not be restricted."
+msgstr "Kun de valgte rolle kan se panelet. Hvis ingen roller er valgt har alle adgang."
+
+#: panels.module:403
+msgid "Path"
+msgstr "Sti"
+
+#: panels.module:404
+msgid "The URL path to give this page, i.e, path/to/page"
+msgstr "Sidens URL (f.eks. sti/til/side)"
+
+#: panels.module:508
+msgid "Save"
+msgstr "Gem"
+
+#: panels.module:527
+msgid "This area has no content."
+msgstr "Området har intet indhold."
+
+#: panels.module:550
+msgid "Configure"
+msgstr "Konfigurer"
+
+#: panels.module:599
+msgid "The panels has been saved."
+msgstr "Paneler gemt."
+
+#: panels.module:607
+msgid "Delete this item"
+msgstr "Slet element"
+
+#: panels.module:613
+msgid "Move item up"
+msgstr "Flyt element op"
+
+#: panels.module:614
+msgid "Move item down"
+msgstr "Flyt element ned"
+
+#: panels.module:749
+msgid "Unable to find requested layout %s"
+msgstr "Kan ikke finde layoutet %s"
+
+#: panels.module:853
+msgid "by %user"
+msgstr "af %user"
+
+#: panels.module:749;0
+msgid "panels"
+msgstr "paneler"
+
+#: panels.module:21
+msgid "create panels"
+msgstr "opret paneler"
+
+#: panels.module:21
+msgid "access all panels"
+msgstr "tilgå alle paneler"
+
+#: panels.info:0
+msgid "Create pages that are divided into areas of the page."
+msgstr "Opret sider der er inddelt i underområdet."
+
+#: content_types/block.inc:75
+#: content_types/views.inc:123
+msgid "Block"
+msgstr "Blok"
+
+#: content_types/block.inc:79;86
+msgid "Add block"
+msgstr "Tilføj blok"
+
+#: content_types/block.inc:107
+msgid "Override title"
+msgstr "Tilsidesæt titel"
+
+#: content_types/block.inc:108
+msgid "If checked, the block title will be overridden with the override title text."
+msgstr "Erstat bloktitlen med teksten i \"tilsidesæt titel\"."
+
+#: content_types/block.inc:113
+msgid "Override title text"
+msgstr "Tilsidesæt titeltekst"
+
+#: content_types/custom.inc:50
+msgid "Enter an optional title for custom content you define"
+msgstr "Indtast en titel for tilpasset indhold"
+
+#: content_types/custom.inc:57;64
+msgid "Add custom"
+msgstr "Tilføj tilpasset"
+
+#: content_types/custom.inc:73;74
+msgid "Title"
+msgstr "Titel"
+
+#: content_types/custom.inc:78
+msgid "Body"
+msgstr "Indhold"
+
+#: content_types/custom.inc:91
+msgid "CSS ID of this custom content."
+msgstr "CSS ID for tilpasset indhold."
+
+#: content_types/custom.inc:98
+msgid "CSS class"
+msgstr "CSS klasse"
+
+#: content_types/custom.inc:99
+msgid "CSS class of this custom content."
+msgstr "CSS klasse for tilpasset indhold."
+
+#: content_types/node.inc:42
+msgid "Enter the title or NID of a post"
+msgstr "Indtast node ID for indlæg"
+
+#: content_types/node.inc:50;57
+msgid "Add post"
+msgstr "Tilføj indlæg"
+
+#: content_types/node.inc:68
+msgid "Unable to find \"%s\""
+msgstr "Kan ikke finde \"%s\""
+
+#: content_types/node.inc:82
+msgid "Teaser"
+msgstr "Smagsprøve"
+
+#: content_types/node.inc:85
+msgid "Check here to show only the node teaser"
+msgstr "Vis kun smagsprøver"
+
+#: content_types/node.inc:90
+msgid "Display links"
+msgstr "Vis links"
+
+#: content_types/node.inc:91
+msgid "Check here to display the links with the post."
+msgstr "Vis links"
+
+#: content_types/node.inc:96
+msgid "Suppress node title"
+msgstr "Skjul titel"
+
+#: content_types/node.inc:97
+msgid "Check here to suppress the node title."
+msgstr "Skjul titel"
+
+#: content_types/views.inc:86
+msgid "Choose a view from the views module"
+msgstr "Vælg en visning"
+
+#: content_types/views.inc:90;97
+msgid "Add view"
+msgstr "Tilføj visning"
+
+#: content_types/views.inc:121
+msgid "View type"
+msgstr "Visningstype"
+
+#: content_types/views.inc:122
+msgid "Select which type of the view to display."
+msgstr "Vælg hvilken udgave af visning der skal vises."
+
+#: content_types/views.inc:123
+msgid "Page"
+msgstr "Side"
+
+#: content_types/views.inc:123
+msgid "Embedded"
+msgstr "Indlejret"
+
+#: content_types/views.inc:128
+msgid "Pager ID"
+msgstr "Sideskifter-ID"
+
+#: content_types/views.inc:130
+msgid "Select the numeric pager ID to use, or 0 to not have use paging. Select \"1\" if you aren't sure what this means"
+msgstr "Vælg et numerisk sideskifter-ID, eller angiv 0 for ikke at bruge sideskift. Vælg \"1\" hvis du er i tvivl om hvad dette betyder."
+
+#: content_types/views.inc:136
+msgid "Posts to Display"
+msgstr "Antal indlæg"
+
+#: content_types/views.inc:138
+msgid "Select the number of posts to display, or 0 to display all results."
+msgstr "Vælg hvor mange indlæg der skal vises, eller 0 for at vise alle indlæg."
+
+#: content_types/views.inc:144
+msgid "View arguments"
+msgstr "Argumenter til visning"
+
+#: content_types/views.inc:146
+msgid "Arguments to send to the view as if they were part of the URL in the form of arg1/arg2/arg3. You can use %0, %1, %2, etc, to use arguments from the actual URL. For example, if your panel URL is foo/bar, and someone hits foo/bar/5 use %2 to get the 5."
+msgstr "Argumenter der skal sendes til visningen som om de er en del af URLen på formen arg1/arg2/arg3. Du kan bruge %0, %1, %2, osv. for at bruge argumenter fra den aktuelle URL."
+
+#: content_types/views.inc:152
+msgid "Override URL"
+msgstr "Tilsidesæt URL"
+
+#: content_types/views.inc:154
+msgid "If this is set, override the View URL; this can sometimes be useful to set to the panel URL"
+msgstr "Tilsidesæt visnings-URL; det kan nogle gange være nyttigt at bruge panel-URLen i stedet."
+
+#: content_types/views.inc:160
+msgid "Display view title"
+msgstr "Vis titel på visning"
+
+#: content_types/views.inc:161
+msgid "If checked, the title of the view will be displayed."
+msgstr "Vis visningens titel."
+
+#: layouts/threecol_25_50_25.inc:8
+msgid "Three column 25/50/25"
+msgstr "Tre spalter 25/50/25"
+
+#: layouts/threecol_25_50_25.inc:12
+#: layouts/threecol_25_50_25_stacked.inc:14
+#: layouts/threecol_33_34_33.inc:13
+#: layouts/threecol_33_34_33_stacked.inc:14
+#: layouts/twocol.inc:13
+#: layouts/twocol_stacked.inc:14
+msgid "Left side"
+msgstr "Venstre side"
+
+#: layouts/threecol_25_50_25.inc:12
+#: layouts/threecol_25_50_25_stacked.inc:14
+#: layouts/threecol_33_34_33.inc:13
+#: layouts/threecol_33_34_33_stacked.inc:14
+msgid "Middle column"
+msgstr "Midterste spalte"
+
+#: layouts/threecol_25_50_25.inc:12
+#: layouts/threecol_25_50_25_stacked.inc:14
+#: layouts/threecol_33_34_33.inc:13
+#: layouts/threecol_33_34_33_stacked.inc:14
+#: layouts/twocol.inc:13
+#: layouts/twocol_stacked.inc:14
+msgid "Right side"
+msgstr "Højre side"
+
+#: layouts/threecol_25_50_25_stacked.inc:10
+msgid "Three column 25/50/25 stacked"
+msgstr "Tre spalter 25/50/25 stablet"
+
+#: layouts/threecol_25_50_25_stacked.inc:14
+#: layouts/threecol_33_34_33_stacked.inc:14
+#: layouts/twocol_stacked.inc:14
+msgid "Top"
+msgstr "Top"
+
+#: layouts/threecol_25_50_25_stacked.inc:14
+#: layouts/threecol_33_34_33_stacked.inc:14
+#: layouts/twocol_stacked.inc:14
+msgid "Bottom"
+msgstr "Bund"
+
+#: layouts/threecol_33_34_33.inc:9
+msgid "Three column 33/34/33"
+msgstr "Tre spalter 33/34/33"
+
+#: layouts/threecol_33_34_33_stacked.inc:10
+msgid "Three column 33/34/33 stacked"
+msgstr "Tre spalter 33/34/33 stablet"
+
+#: layouts/twocol.inc:9
+msgid "Two column"
+msgstr "To spalter"
+
+#: layouts/twocol_stacked.inc:10
+msgid "Two column stacked"
+msgstr "To spalter stablet"
+
Index: modules/panels/translations/de.po
===================================================================
RCS file: modules/panels/translations/de.po
diff -N modules/panels/translations/de.po
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ modules/panels/translations/de.po	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,424 @@
+# $Id: de.po,v 1.1.2.1 2007/06/02 10:38:50 hass Exp $
+#
+# LANGUAGE translation of Drupal (general)
+# Copyright YEAR NAME <EMAIL@ADDRESS>
+# Generated from files:
+#  panels.module,v 1.10.2.9 2007/03/15 23:13:41 merlinofchaos
+#  fourcol_25_25_25_25.inc,v 1.0 2006/09/02 11:47:00 alexander.hass
+#  threecol_33_33_33.inc,v 1.0 2006/09/02 11:47:00 alexander.hass
+#  twocol_25_75.inc,v 1.0 2006/09/02 11:47:00 alexander.hass
+#  twocol_33_66.inc,v 1.0 2006/09/02 11:47:00 alexander.hass
+#  twocol_38_62.inc,v 1.0 2006/09/02 11:47:00 alexander.hass
+#  twocol_50_50.inc,v 1.0 2006/09/02 11:47:00 alexander.hass
+#  twocol_62_38.inc,v 1.0 2006/09/02 11:47:00 alexander.hass
+#  twocol_66_33.inc,v 1.0 2006/09/02 11:47:00 alexander.hass
+#  twocol_75_25.inc,v 1.0 2006/09/02 11:47:00 alexander.hass
+#  threecol_25_50_25_stacked.inc,v 1.5 2006/08/22 23:54:20 merlinofchaos
+#  threecol_33_34_33.inc,v 1.5 2006/08/22 23:54:20 merlinofchaos
+#  threecol_33_34_33_stacked.inc,v 1.5 2006/08/22 23:54:20 merlinofchaos
+#  twocol.inc,v 1.6 2006/08/22 23:54:20 merlinofchaos
+#  twocol_stacked.inc,v 1.5 2006/08/22 23:54:20 merlinofchaos
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: panels 5.x\n"
+"POT-Creation-Date: 2007-03-24 21:42+0100\n"
+"PO-Revision-Date: 2007-06-02 12:37+0100\n"
+"Last-Translator: Alexander Hass\n"
+"Language-Team: Alexander Hass\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Poedit-Language: German\n"
+"X-Poedit-Country: GERMANY\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: panels.module:382
+#: content_types/custom.inc:90
+msgid "CSS ID"
+msgstr "CSS ID"
+
+#: content_types/block.inc:75
+#: content_types/views.inc:123
+msgid "Block"
+msgstr "Block"
+
+#: layouts/threecol_25_50_25.inc:12
+#: layouts/threecol_25_50_25_stacked.inc:14
+#: layouts/threecol_33_34_33.inc:13
+#: layouts/threecol_33_34_33_stacked.inc:14
+#: layouts/twocol.inc:13
+#: layouts/twocol_stacked.inc:14
+msgid "Left side"
+msgstr "Linke Spalte"
+
+#: layouts/threecol_25_50_25.inc:12
+#: layouts/threecol_25_50_25_stacked.inc:14
+#: layouts/threecol_33_34_33.inc:13
+#: layouts/threecol_33_34_33_stacked.inc:14
+msgid "Middle column"
+msgstr "Mittlere Spalte"
+
+#: layouts/threecol_25_50_25.inc:12
+#: layouts/threecol_25_50_25_stacked.inc:14
+#: layouts/threecol_33_34_33.inc:13
+#: layouts/threecol_33_34_33_stacked.inc:14
+#: layouts/twocol.inc:13
+#: layouts/twocol_stacked.inc:14
+msgid "Right side"
+msgstr "Rechte Spalte"
+
+#: layouts/threecol_25_50_25_stacked.inc:14
+#: layouts/threecol_33_34_33_stacked.inc:14
+#: layouts/twocol_stacked.inc:14
+msgid "Top"
+msgstr "Oben"
+
+#: layouts/threecol_25_50_25_stacked.inc:14
+#: layouts/threecol_33_34_33_stacked.inc:14
+#: layouts/twocol_stacked.inc:14
+msgid "Bottom"
+msgstr "Unten"
+
+#: content_types/block.inc:79
+#: ;86
+msgid "Add block"
+msgstr "Block hinzufügen"
+
+#: content_types/block.inc:107
+msgid "Override title"
+msgstr "Titel überschreiben"
+
+#: content_types/block.inc:108
+msgid "If checked, the block title will be overridden with the override title text."
+msgstr "Sobald aktiviert, wird der Blocktitel mit dem Texttitel überschrieben."
+
+#: content_types/block.inc:113
+msgid "Override title text"
+msgstr "Titeltext überschreiben"
+
+#: content_types/custom.inc:50
+msgid "Enter an optional title for custom content you define"
+msgstr "Einen optionalen Titel für benutzerdefinierten Inhalt eingeben"
+
+#: content_types/custom.inc:57
+#: ;64
+msgid "Add custom"
+msgstr "Benutzerdefiniert hinzufügen"
+
+#: content_types/custom.inc:73
+#: ;74
+msgid "Title"
+msgstr "Titel"
+
+#: content_types/custom.inc:78
+msgid "Body"
+msgstr "Textkörper"
+
+#: content_types/custom.inc:91
+msgid "CSS ID of this custom content."
+msgstr "CSS ID dieses benutzerdefinierten Inhaltes."
+
+#: content_types/custom.inc:98
+msgid "CSS class"
+msgstr "CSS Klasse"
+
+#: content_types/custom.inc:99
+msgid "CSS class of this custom content."
+msgstr "CSS Klasse dieses benutzerdefinierten Inhaltes."
+
+#: content_types/node.inc:42
+msgid "Enter the title or NID of a post"
+msgstr "Den Titel oder die NID des Beitrages eingeben"
+
+#: content_types/node.inc:50
+#: ;57
+msgid "Add post"
+msgstr "Beitrag hinzufügen"
+
+#: content_types/node.inc:68
+msgid "Unable to find \"%s\""
+msgstr "„%s“ wurde nicht gefunden"
+
+#: content_types/node.inc:82
+msgid "Teaser"
+msgstr "Anrisstext"
+
+#: content_types/node.inc:85
+msgid "Check here to show only the node teaser"
+msgstr "Aktivieren, um nur den Anrisstext des Beitrages anzuzeigen."
+
+#: content_types/node.inc:90
+msgid "Display links"
+msgstr "Verweise anzeigen"
+
+#: content_types/node.inc:91
+msgid "Check here to display the links with the post."
+msgstr "Aktivieren, um die Verweise mit dem Beitrag anzuzeigen."
+
+#: content_types/node.inc:96
+msgid "Suppress node title"
+msgstr "Beitragstitel unterdrücken"
+
+#: content_types/node.inc:97
+msgid "Check here to suppress the node title."
+msgstr "Aktivieren, um den Beitragstitel zu unterdrücken."
+
+#: layouts/threecol_25_50_25.inc:8
+msgid "Three column 25/50/25"
+msgstr "Drei Spalten 25/50/25"
+
+#: layouts/threecol_25_50_25_stacked.inc:10
+msgid "Three column 25/50/25 stacked"
+msgstr "Drei Spalten 25/50/25 gestapelt"
+
+#: layouts/threecol_33_34_33.inc:9
+msgid "Three column 33/34/33"
+msgstr "Drei Spalten 33/34/33"
+
+#: layouts/threecol_33_34_33_stacked.inc:10
+msgid "Three column 33/34/33 stacked"
+msgstr "Drei Spalten 33/34/33 gestapelt"
+
+#: layouts/twocol.inc:9
+msgid "Two column"
+msgstr "Zwei Spalten"
+
+#: layouts/twocol_stacked.inc:10
+msgid "Two column stacked"
+msgstr "Zwei Spalten gestapelt"
+
+#: panels.module:11
+msgid "<p>You may peruse a list of your current panels layouts and edit them, or click add to create a new page.</p>"
+msgstr "<p>Die Liste der aktuellen Panel Layouts kann überprüft, bearbeitet oder eine neue Seite erstellt werden.</p>"
+
+#: panels.module:13
+msgid "<p>Choose a layout for your new page from the list below.</p>"
+msgstr "<p>Ein Layout für die neue Seite von der unten aufgeführten Liste auswählen.</p>"
+
+#: panels.module:60
+#: panels.info:0
+msgid "Panels"
+msgstr "Panels"
+
+#: panels.module:63
+msgid "Create pages on your site that are 2 or 3 columns"
+msgstr "Seiten mit 2 oder 3 Spalten in der Webseite erstellen"
+
+#: panels.module:67
+msgid "List"
+msgstr "Alle anzeigen"
+
+#: panels.module:75
+#: ;82
+msgid "Add"
+msgstr "Hinzufügen"
+
+#: panels.module:89
+msgid "Edit panels"
+msgstr "Panels bearbeiten"
+
+#: panels.module:96
+msgid "Delete panels"
+msgstr "Panels löschen"
+
+#: panels.module:105
+msgid "Autocomplete node"
+msgstr "Beitrag automatisch vervollständigen"
+
+#: panels.module:199
+msgid "Edit"
+msgstr "Bearbeiten"
+
+#: panels.module:200
+#: ;228
+msgid "Delete"
+msgstr "Löschen"
+
+#: panels.module:205
+msgid "Panel title"
+msgstr "Paneltitel"
+
+#: panels.module:206
+msgid "URL"
+msgstr "URL"
+
+#: panels.module:207
+msgid "Operations"
+msgstr "Operationen"
+
+#: panels.module:225
+msgid "Are you sure you want to delete %title?"
+msgstr "Soll %title wirklich gelöscht werden?"
+
+#: panels.module:227
+msgid "This action cannot be undone."
+msgstr "Diese Aktion kann nicht rückgängig gemacht werden."
+
+#: panels.module:228
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#: panels.module:308
+msgid "Add content"
+msgstr "Inhalt hinzufügen"
+
+#: panels.module:310
+msgid "Select an area to add content to, then select a type of content and click the appropriate button. The content will be added."
+msgstr "Zuerst einen Bereich auswählen zu dem Inhalt hinzugefügt werden soll, dann einen Inhalt auswählen und den entsprechenden Knopf drücken. Der Inhalt wird hinzugefügt."
+
+#: panels.module:319
+msgid "Area"
+msgstr "Bereich"
+
+#: panels.module:358
+msgid "General information"
+msgstr "Allgemeine Information"
+
+#: panels.module:375
+msgid "Page title"
+msgstr "Seitentitel"
+
+#: panels.module:376
+msgid "The page title for this panels layout"
+msgstr "Der Seitentitel für dieses Panels Layout"
+
+#: panels.module:383
+msgid "The CSS ID to apply to this page"
+msgstr "Die CSS ID, welche auf diese Seite angewendet werden soll"
+
+#: panels.module:394
+msgid "Access"
+msgstr "Zugriff"
+
+#: panels.module:397
+msgid "Only the checked roles will be able to see this panel in any form; if no roles are checked, access will not be restricted."
+msgstr "Nur die aktivierten Rollen können dieses Panel in jeglicher Art sehen; Wenn keine Rollen aktiviert sind, wird der Zugriff nicht beschränkt."
+
+#: panels.module:403
+msgid "Path"
+msgstr "Pfad"
+
+#: panels.module:404
+msgid "The URL path to give this page, i.e, path/to/page"
+msgstr "Der URL Pfad den diese Seite erhalten soll, z.b.: pfad/zu/seite"
+
+#: panels.module:508
+msgid "Save"
+msgstr "Speichern"
+
+#: panels.module:527
+msgid "This area has no content."
+msgstr "Dieser Bereich hat keinen Inhalt."
+
+#: panels.module:550
+msgid "Configure"
+msgstr "Konfigurieren"
+
+#: panels.module:599
+msgid "The panels has been saved."
+msgstr "Das Panel wurde gespeichert."
+
+#: panels.module:607
+msgid "Delete this item"
+msgstr "Diesen Beitrag löschen"
+
+#: panels.module:613
+msgid "Move item up"
+msgstr "Beitrag nach oben verschieben"
+
+#: panels.module:614
+msgid "Move item down"
+msgstr "Beitrag nach unten verschieben"
+
+#: panels.module:749
+msgid "Unable to find requested layout %s"
+msgstr "Das Layout %s konnte nicht gefunden werden"
+
+#: panels.module:853
+msgid "by %user"
+msgstr "von %user"
+
+#: panels.module:749
+#: ;0 panels.info:0
+msgid "panels"
+msgstr "panels"
+
+#: panels.module:21
+msgid "create panels"
+msgstr "Panels erstellen"
+
+#: panels.module:21
+msgid "access all panels"
+msgstr "Zugriff auf alle Panels"
+
+#: panels.info:0
+msgid "Create pages that are divided into areas of the page."
+msgstr "Erstelle Seiten, welche in Bereiche der Seite unterteilt sind."
+
+#: content_types/views.inc:86
+msgid "Choose a view from the views module"
+msgstr "Eine Ansicht vom Ansichtenmodul wählen"
+
+#: content_types/views.inc:90
+#: ;97
+msgid "Add view"
+msgstr "Ansicht hinzufügen"
+
+#: content_types/views.inc:121
+msgid "View type"
+msgstr "Ansichtstyp"
+
+#: content_types/views.inc:122
+msgid "Select which type of the view to display."
+msgstr "Den Typ einer Ansicht auswählen, der angezeigt werden soll."
+
+#: content_types/views.inc:123
+msgid "Page"
+msgstr "Seite"
+
+#: content_types/views.inc:123
+msgid "Embedded"
+msgstr "Eingebettet"
+
+#: content_types/views.inc:128
+msgid "Pager ID"
+msgstr "Pager ID"
+
+#: content_types/views.inc:130
+msgid "Select the numeric pager ID to use, or 0 to not have use paging. Select \"1\" if you aren't sure what this means"
+msgstr "Die zu verwendende Seitenreiter ID auswählen, oder 0 um keine Seitenreiter zu verwenden. Bei Unsicherheiten \"1\" wählen."
+
+#: content_types/views.inc:136
+msgid "Posts to Display"
+msgstr "Anzuzeigende Beiträge"
+
+#: content_types/views.inc:138
+msgid "Select the number of posts to display, or 0 to display all results."
+msgstr "Die Anzahl der anzuzeigenden Beiträge auswählen, oder 0 um alle Ergebnisse anzuzeigen."
+
+#: content_types/views.inc:144
+msgid "View arguments"
+msgstr "Argumente anzeigen"
+
+#: content_types/views.inc:146
+msgid "Arguments to send to the view as if they were part of the URL in the form of arg1/arg2/arg3. You can use %0, %1, %2, etc, to use arguments from the actual URL. For example, if your panel URL is foo/bar, and someone hits foo/bar/5 use %2 to get the 5."
+msgstr "Argumente an die Ansicht übergeben, als wenn diese Teil der URL sind, in Form von arg1/arg2/arg3. Um Argumente von der aktuellen URL zu verwenden, kann %0, %1, %2, usw. verwendet werden. Sollte die Panel URL foo/bar lauten und jemand greift auf foo/bar/5 zu, kann %2 verwendet werden, um die 5 zu erhalten."
+
+#: content_types/views.inc:152
+msgid "Override URL"
+msgstr "URL überschreiben"
+
+#: content_types/views.inc:154
+msgid "If this is set, override the View URL; this can sometimes be useful to set to the panel URL"
+msgstr "Sobald aktiviert, wird die Ansichten URL überschrieben; Manchmal kann es sinnvoll sein, die Panel URL einzusetzten."
+
+#: content_types/views.inc:160
+msgid "Display view title"
+msgstr "Ansichtentitel anzeigen"
+
+#: content_types/views.inc:161
+msgid "If checked, the title of the view will be displayed."
+msgstr "Sobald aktiviert, wird der Titel der Ansicht angezeigt."
+
Index: modules/panels/panels.admin.inc
===================================================================
RCS file: modules/panels/panels.admin.inc
diff -N modules/panels/panels.admin.inc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ modules/panels/panels.admin.inc	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,621 @@
+<?php
+// $Id: panels.module,v 1.10.2.9 2007/03/15 23:13:41 merlinofchaos Exp $
+
+// ---------------------------------------------------------------------------
+// panels custom image button
+
+/**
+ * Custom form element to do our nice images.
+ */
+function panels_elements() {
+  $type['panels_imagebutton'] = array(
+    '#input' => TRUE,
+    '#button_type' => 'submit'
+  );
+  return $type;
+}
+
+/**
+ * Theme our image button.
+ */
+function theme_panels_imagebutton($element) {
+  return '<input type="image" class="form-'. $element['#button_type'] .'" name="'. $element['#name'] .'" value="'. check_plain($element['#default_value']) .'" '. drupal_attributes($element['#attributes']) .' src="'. $element['#image'] .'" alt="'. $element['#title'] .'" title="'. $element['#title'] ."\" />\n";
+}
+
+function _panels_imagebutton_value() {
+  // null function guarantees default_value doesn't get moved to #value.
+}
+
+/**
+ * Add a single button to a form.
+ */
+function _panels_add_button($image, $name, $text) {
+  $module_path = base_path() . drupal_get_path('module', 'panels');
+
+  return array(
+    '#type' => 'panels_imagebutton',
+    '#image' => $module_path .'/images/'. $image,
+    '#title' => $text,
+    '#default_value' => $name,
+  );
+}
+
+/**
+ * Set a button to a blank image -- used for placeholders when buttons are
+ * not relevant but just removing it would be visually unappealing.
+ */
+function _panels_set_blank(&$form) {
+  $form['#type'] = 'markup';
+  $form['#value'] = theme('image', drupal_get_path('module', 'panels') .'/images/blank.gif');
+}
+
+// ---------------------------------------------------------------------------
+// panels administrative pages
+
+/**
+ * Provide a list of panels, with links to edit or delete them.
+ */
+function _panels_list_page() {
+  $result = db_query("SELECT * FROM {panels_info} ORDER BY title");
+  $items = array();
+  while ($panels = db_fetch_object($result)) {
+    $item = array();
+    $item[] = check_plain($panels->title);
+    $item[] = l($panels->path, $panels->path);
+    $item[] = implode(' | ', array(
+      l(t('Edit'), "admin/build/panels/edit/$panels->did"),
+      l(t('Delete'), "admin/build/panels/delete/$panels->did"),
+    ));
+    $items[] = $item;
+  }
+  $header = array(
+    t('Panel title'),
+    t('URL'),
+    t('Operations'),
+  );
+  $output = theme('table', $header, $items);
+  return $output;
+}
+
+/*
+ * Provide a form to confirm deletion of a panel page.
+ */
+function panels_delete_form(&$form_state, $panel) {
+  $form['title'] = array('#type' => 'hidden', '#value' => $panel->title);
+  $form['did'] = array('#type' => 'hidden', '#value' => $panel->did);
+
+  return confirm_form(
+    $form,
+    t('Delete panel %title?', array('%title' => $panel->title)),
+    'admin/build/panels',
+    '<p>'. t('Are you sure you want to delete %title?', array('%title' => $panel->title)) .'</p>',
+    t('Delete'),
+    t('Cancel')
+  );
+}
+
+function panels_delete_form_submit($form, &$form_state) {
+  _panels_delete_panels((object) $form_state['values']);
+  drupal_set_message(t('The panel %title has been deleted.', array('%title' => $form_state['values']['title'])));
+  $form_state['redirect'] = 'admin/build/panels';
+  return;
+}
+
+/**
+ * Handle the add panels page
+ */
+function panels_add_page_form(&$form_state, $layout = NULL) {
+
+  $layouts = _panels_get_layouts();
+  $form = array();
+  drupal_add_css(drupal_get_path('module', 'panels') .'/panels_admin.css');
+
+  if (empty($layout)) {
+    $form['layout'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Layouts'),
+      '#collapsible' => false,
+      '#description' => t('Choose a layout for your new page from the list below.')
+    );
+    foreach ($layouts as $id => $layout) {
+      if (empty($default_id)) {
+        // grab the first one for our default.
+        $default_id = $id;
+      }
+      $file = _panels_get_file_path($layout['module'], $layout['icon'], false);
+      $form['layout'][$id] = array(
+        '#type' => 'image_button',
+        '#title' => t('Layout @title', array('@title' => $layout['title'])),
+        '#src' => $file,
+        '#prefix' => '<div class="layout-link">',
+        '#suffix' => '<div>'. $layout['title'] .'</div></div>',
+        '#layout' => $id,
+      );
+    }
+    return $form;
+  }
+
+  if (empty($layouts[$layout])) {
+    return drupal_not_found();
+  }
+
+  $panels->layout = $layout;
+  // TODO: return drupal_get_form('panels_edit_form', $panels);
+  return array_merge($form, panels_edit_form($form_state, $panels));
+}
+
+function panels_add_page_form_submit($form, &$form_state) {
+  $form_state['redirect'] = 'admin/build/panels/add/'. check_plain($form_state['clicked_button']['#layout']) .'/page';
+}
+
+// ---------------------------------------------------------------------------
+// panels administrative pages
+
+/**
+ * shortcut to ease the syntax of the various form builder tricks we use.
+ */ 
+function _panels_form_builder($form, &$form_state, $form_id = 'panels_edit_form') {
+  $form['#post'] = $_POST;
+  $form = form_builder($form_id, $form, $form_state);
+}
+
+/**
+ * Edit an already loaded panels.
+ */
+function panels_edit_form(&$form_state, $panels) {
+
+  drupal_add_css(drupal_get_path('module', 'panels') .'/panels_admin.css');
+  $layouts = _panels_get_layouts();
+  $layout = $layouts[$panels->layout];
+  $content_types = _panels_get_content_types();
+
+  // Process all our add button stuff first so we can add stuff to the
+  // form semi dynamically.
+  $form['add'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Add content'),
+    '#collapsible' => false,
+    '#description' => t('Select an area to add content to, then select a type of content and click the appropriate button. The content will be added.'),
+  );
+
+  // Drop the array keys into a temporary in order to protect references.
+  $temp = array_keys($layout['content areas']);
+  $default_radio = array_shift($temp);
+
+  $form['add']['area'] = array(
+    '#type' => 'radios',
+    '#title' => t('Area'),
+    '#options' => $layout['content areas'],
+    '#prefix' => '<div class="container-inline">',
+    '#suffix' => '</div>',
+    '#default_value' => $default_radio,
+  );
+  
+  foreach ($content_types as $id => $type) {
+    $function = $type['admin'];
+    if (function_exists($function)) {
+      global $form_values;
+      $form['add'][$id] = $function('add button', $dummy); 
+
+      // $dummy needed for cause you can't have default args on a reference.
+      $form['add'][$id]['#parents'] = array('add', $id);
+      $form['add'][$id]['#tree'] = true;
+      $form['add'][$id]['#programmed'] = FALSE; // Fix for D6 core bug
+      _panels_form_builder($form['add'][$id], $form_state);
+
+      if ($conf = $function('add', $form_state['values']['add'][$id])) {
+        $add->configuration = $conf;
+        $add->type = $id;
+        $form['add']['area']['#parents'] = array('area');
+        $form['add']['area']['#programmed'] = FALSE; // D6 fix?
+        _panels_form_builder($form['add']['area'], $form_state);
+        $add->area = $form_state['values']['area'];
+      }
+    }
+  }
+
+  $form['layout'] = array(
+    '#type' => 'value',
+    '#value' => $panels->layout
+  );
+
+  $form['did'] = array(
+    '#type' => 'value',
+    '#value' => (!empty($panels->did) ? $panels->did : NULL),
+  );
+
+  $form['info'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('General information'),
+    '#collapsible' => false,
+  );
+
+  $file = _panels_get_file_path($layout['module'], $layout['icon'], false);
+  $icon = theme('image', $file);
+  $form['info']['layout-icon'] = array(
+    '#value' => '<div class="layout-icon">'. $icon .'</div>',
+  );
+
+  $form['info']['layout-display'] = array(
+    '#value' => '<strong>Layout</strong>: '. $layout['title'],
+  );
+
+  $form['info']['title'] = array(
+    '#type' => 'textfield',
+    '#default_value' => (!empty($panels->title) ? $panels->title : ''),
+    '#title' => t('Page title'),
+    '#description' => t('The page title for this panels layout'),
+  );
+
+  $form['info']['css_id'] = array(
+    '#type' => 'textfield',
+    '#default_value' => (!empty($panels->css_id) ? $panels->css_id : ''),
+    '#title' => t('CSS ID'),
+    '#description' => t('The CSS ID to apply to this page'),
+  );
+
+  $rids = array();
+  $result = db_query("SELECT r.rid, r.name FROM {role} r ORDER BY r.name");
+  while ($obj = db_fetch_object($result)) {
+    $rids[$obj->rid] = $obj->name;
+  }
+
+  $form['info']['access'] = array(
+    '#type' => 'checkboxes',
+    '#title' => t('Access'),
+    '#default_value' => (!empty($panels->access) ? $panels->access : ''),
+    '#options' => $rids,
+    '#description' => t('Only the checked roles will be able to see this panel in any form; if no roles are checked, access will not be restricted.'),
+  );
+
+  $form['info']['path'] = array(
+    '#type' => 'textfield',
+    '#default_value' => (!empty($panels->path) ? $panels->path : NULL),
+    '#title' => t('Path'),
+    '#description' => t('The URL path to give this page, i.e, path/to/page'),
+    '#required' => TRUE,
+  );
+
+  $form['content'] = array(
+    '#tree' => true,
+  );
+  
+  // Go through our content areas and display what we have.
+  foreach ($layout['content areas'] as $area => $title) {
+    $list = array();
+    $form['content'][$area] = array(
+      '#tree' => true,
+    );
+
+    // Construct the order, feeding it the default order for what
+    // we know about. When we pull it back out, it may well be
+    // different due to past submits.
+    $order = array();
+    if (!empty($panels->content[$area])) {
+      $order = array_keys($panels->content[$area]);
+    }
+    $form['content'][$area]['order'] = array(
+      '#type' => 'hidden',
+      '#default_value' => serialize($order),
+      '#parents' => array('content', $area, 'order'),
+      '#programmed' => FALSE, // Fix for core D6 bug
+    );
+
+    // If an add button has added an item to the area, put it in and update
+    // the $order.
+    _panels_form_builder($form['content'][$area]['order'], $form_state);
+    // $order = unserialize($form['content'][$area]['order']['#value']);
+    $order = array(); 
+    if (!empty($form['content'][$area]['order']['#value'])) {
+      $order = unserialize($form['content'][$area]['order']['#value']);
+    }
+    if ($add->area == $area) {
+      // say THIS 5 times real fast
+      if (!empty($panels->content[$area]) && $order) {
+        $position = max(max(array_keys($order)), max(array_keys($panels->content[$area]))) + 1;
+      }
+      else if ($order) {
+        $position = max(array_keys($order)) + 1;
+      }
+      else {
+        $position = 0;
+      }
+
+      $panels->content[$area][$position] = $add;
+      $order[] = $position;
+      $form['content'][$area]['order']['#value'] = serialize($order);
+    }
+
+    // Go through each item in the area and render it.
+    $count = count($order);
+    foreach ($order as $position => $id) {
+      // place buttons to re-order content. 
+      $form['content'][$area][$id]['buttons'] = array(
+        '#parents' => array('content', $area, $id, 'buttons'),
+        '#tree' => TRUE,
+        '#programmed' => FALSE, // Fix for core D6 bug
+      );
+      _panels_add_buttons($form['content'][$area][$id]['buttons'], $count, $position);
+
+      // figure out if one of those buttons was pressed
+      _panels_form_builder($form['content'][$area][$id]['buttons'], $form_state);
+      $deleted = false;
+      // FIXME: needs testing if $form_state['values'] works.
+      // foreach ($GLOBALS['form_values']['content'][$area][$id]['buttons'] as $button => $value) {
+      foreach ($form_state['values']['content'][$area][$id]['buttons'] as $button => $value) {
+        if ($value) {
+          $function = '_panels_move_'. $button;
+          $function($order, $position);
+          $form['content'][$area]['order']['#value'] = serialize($order);
+          if ($button == 'delete')
+          $deleted = true;
+        }
+      }
+      // If a content item was deleted, it still has buttons. Get rid of them.
+      // It had buttons because we needed to give it buttons to see if its
+      // buttons were clicked.
+      if ($deleted) {
+        unset($form['content'][$area][$id]['buttons']);
+      }
+      else {
+        // we finally get to add the conent item's content to the form.
+        $area_record = $panels->content[$area][$id];
+        $form['content'][$area][$id]['type'] = array(
+          '#type' => 'hidden',
+          '#default_value' => $area_record->type,
+          '#parents' => array('content', $area, $id, 'type'),
+          '#programmed' => FALSE, // Fix for core D6 bug
+        );
+        // retrieve what was already there -- so we can retain edits and
+        // content items that were added.
+        _panels_form_builder($form['content'][$area][$id]['type'], $form_state);
+        $type = $form['content'][$area][$id]['type']['#value'];
+        $function = $content_types[$type]['admin'];
+        if (function_exists($function)) {
+          $array = array(
+            '#tree' => true,
+            '#parents' => array('content', $area, $id, 'configuration'),
+            '#programmed' => FALSE, // Fix for core D6 bug
+          );
+          $form['content'][$area][$id]['configuration'] = array_merge($array, $function('edit', $area_record->configuration, array('content', $area, $id, 'configuration')));
+          _panels_form_builder($form['content'][$area][$id]['configuration'], $form_state);
+        }        
+      }
+    }
+  }
+
+  $form['submit'] = array(
+    '#type' => 'submit',
+    '#value' => t('Save'),
+  );  
+
+  return $form;
+}
+
+/**
+ * Display the form to edit a panels.
+ */
+function theme_panels_edit_form($form) {
+  $layouts = _panels_get_layouts();
+  $layout = $layouts[$form['layout']['#value']];
+
+  $content_types = _panels_get_content_types();
+
+  $content = array();
+  $output = '';
+  $output .= drupal_render($form['info']);
+  foreach ($layout['content areas'] as $area => $title) {
+    $order = unserialize($form['content'][$area]['order']['#value']);
+    $area_content = '';
+    $area_description = '';
+    if (!$order) {
+      $area_description = t('This area has no content.');
+    }
+    else {
+      $count = count($order);
+      foreach ($order as $position => $id) {
+        if ($count > 1) {
+          if ($position == 0 ) {
+            _panels_set_blank($form['content'][$area][$id]['buttons']['up']);
+          }
+          else if ($position == ($count - 1)) {
+            _panels_set_blank($form['content'][$area][$id]['buttons']['down']);
+          }
+        }
+        $type = NULL;
+        $function = NULL;
+        if (!empty($form['content'][$area][$id]['type']['#value'])) {
+          $type = $form['content'][$area][$id]['type']['#value'];
+          $function = $content_types[$type]['admin'];
+        }
+        if (function_exists($function)) {
+          // figure out the actual values; using the global because we need it
+          // to be in the same format it'll be in 'submit'.
+          global $form_values;
+          $conf_form = $form_values['content'][$area][$id]['configuration'];
+          $conf = $function('save', $conf_form);
+          $fieldset = array(
+            '#title' => t('Configure'), 
+            '#children' => drupal_render($form['content'][$area][$id]['configuration']), 
+            '#collapsible' => true, 
+            '#collapsed' => true
+          );
+          $buttons = drupal_render($form['content'][$area][$id]['buttons']);
+          $area_content .= $buttons .'&nbsp;'. $function('list', $conf) . theme('fieldset', $fieldset);
+        }
+      }
+    }
+    $content[$area] = theme('fieldset', array(
+        '#title' => check_plain($title),
+        '#description' => $area_description,
+        '#value' => $area_content,
+        '#collapsible' => true,
+        '#collapsed' => false,
+      )
+    );
+  }
+
+  $output .= _panels_get_layout($layout, $content);
+
+  $output .= drupal_render($form);
+  return $output;
+}
+
+function panels_edit_form_validate($form, &$form_state) {
+  $content_types = _panels_get_content_types();
+  foreach ($form_state['values']['content'] as $area => $content) {
+    foreach ($content as $id => $item) {
+      if (is_numeric($id)) {
+        $function = $content_types[$item['type']]['admin'];
+        if (function_exists($function)) {
+          $function('validate', $item['configuration'], $form_state['values']['content'][$area][$id]['configuration']);
+        }
+      }
+    }
+  }
+}
+
+function panels_edit_form_submit($form, &$form_state) {
+  $panels = (object) $form_state['values'];
+  // be sure we get the order right.
+  foreach ($form_state['values']['content'] as $area => $content) {
+    $array = array();
+    $order = unserialize($content['order']);
+    if (is_array($order)) {
+      foreach ($order as $id) {
+        $array[] = $content[$id];
+      }
+    }
+    $panels->content[$area] = $array;
+  }
+  $panels->access = array_keys(array_filter($panels->access));
+  _panels_save_panels($panels);
+  drupal_set_message(t('The panels has been saved.'));
+  $form_state['redirect'] = 'admin/build/panels';
+}
+
+/**
+ * add the buttons to a content item
+ */
+function _panels_add_buttons(&$form, $count, $position) {
+  $form['delete'] = _panels_add_button('user-trash.png', 'delete', t('Delete this item'));
+  // Leaving these in but commented out as I'm not convinced we don't want them.
+//  if ($count > 2) {
+//    $form['top'] = _panels_add_button('go-top.png', 'top', t('Move item to top'));
+//  }
+  if ($count > 1) {
+    $form['up'] = _panels_add_button('go-up.png', 'up', t('Move item up'));
+    $form['down'] = _panels_add_button('go-down.png', 'down', t('Move item down'));
+  }
+//  if ($count > 2) {
+//    $form['bottom'] = _panels_add_button('go-bottom.png', 'bottom', t('Move item to bottom'));
+//  }
+//  if ($count > 1) {
+//    $form['spacer'] = panels_add_blank();
+//  }
+  return $form;
+}
+
+/**
+ * move an item in an array to the top
+ */
+function _panels_move_top(&$array, &$position) {
+  $value = $array[$position];
+  unset($array[$position]);
+  array_unshift($array, $value);
+  // reindex the array now
+  $array = array_values($array);
+}
+
+/**
+ * move an item in an array to the bottom
+ */
+function _panels_move_bottom(&$array, &$position) {
+  $value = $array[$position];
+  unset($array[$position]);
+  $array[] = $value;
+  // reindex the array now
+  $array = array_values($array);
+}
+
+/**
+ * move an item in an array up one position
+ */
+function _panels_move_up(&$array, &$position) {
+  $value = $array[$position];
+  $array[$position] = $array[$position - 1];
+  $array[$position - 1] = $value;
+}
+
+/**
+ * move an item in an array up one position
+ */
+function _panels_move_down(&$array, &$position) {
+  $value = $array[$position];
+  $array[$position] = $array[$position + 1];
+  $array[$position + 1] = $value;
+}
+
+/**
+ * Remove an item from an array
+ */
+function _panels_move_delete(&$array, &$position) {
+  unset($array[$position]);
+  // reindex the array now
+  $array = array_values($array);
+}
+
+// ---------------------------------------------------------------------------
+// panels database functions
+
+function _panels_save_panels($panels) {
+  $panels->access = implode(', ', $panels->access);
+  if ($panels->did) {
+    db_query("UPDATE {panels_info} SET title = '%s', access = '%s', path = '%s', css_id = '%s', layout = '%s' WHERE did = %d", $panels->title, $panels->access, $panels->path, $panels->css_id, $panels->layout, $panels->did);
+    db_query("DELETE FROM {panels_area} WHERE did = %d", $panels->did);
+  }
+  else {
+    db_query("INSERT INTO {panels_info} (title, access, path, css_id, layout) VALUES ('%s', '%s', '%s', '%s', '%s')", $panels->title, $panels->access, $panels->path, $panels->css_id, $panels->layout);
+    // Put this in the form so modules can utilize the did of a new panel.
+    $GLOBALS['form_values']['did'] = db_last_insert_id('panels_info', 'did');
+  }
+  foreach ($panels->content as $area => $info) {
+    foreach ($info as $position => $block) {
+      if (is_numeric($position)) { // don't save some random form stuff that may've been here.
+        $block = (object) $block;
+        db_query("INSERT INTO {panels_area} (did, area, type, configuration, position) VALUES(%d, '%s', '%s', '%s', %d)", $panels->did, $area, $block->type, serialize($block->configuration), $position);
+      }
+    }
+  }
+  menu_rebuild();
+}
+
+function _panels_delete_panels($panels) {
+  db_query("DELETE FROM {panels_info} WHERE did = %d", $panels->did);
+  db_query("DELETE FROM {panels_area} WHERE did = %d", $panels->did);
+  menu_rebuild();
+}
+
+/**
+ * Helper function for autocompletion of node titles.
+ * This is mostly stolen from clipper.
+ */
+function _panels_node_autocomplete($string) {
+  if ($string != '') { // if there are node_types passed, we'll use those in a MySQL IN query.
+    $result = db_query_range(db_rewrite_sql('SELECT n.title, u.name FROM {node} n INNER JOIN {users} u ON u.uid = n.uid WHERE LOWER(title) LIKE LOWER("%%%s%%")'), $string, 0, 10);
+    $array = array(); // FIXME: looks like dead code!?
+    $prefix = count($array) ? implode(', ', $array) .', ' : '';
+
+    $matches = array();
+    while ($node = db_fetch_object($result)) {
+      $n = $node->title;
+      // Commas and quotes in terms are special cases, so encode 'em.
+      if (preg_match('/,/', $node->title) || preg_match('/"/', $node->title)) {
+        $n = '"'. preg_replace('/"/', '""', $node->title) .'"';
+      }
+      $matches[$prefix . $n] = '<span class="autocomplete_title">'. check_plain($node->title) .'</span> <span class="autocomplete_user">('. t('by %user', array('%user' => check_plain($node->name))) .')</span>';
+    }
+    print drupal_to_js($matches);
+    exit();
+  }
+}
Index: modules/panels/translations/panels.pot
===================================================================
RCS file: modules/panels/translations/panels.pot
diff -N modules/panels/translations/panels.pot
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ modules/panels/translations/panels.pot	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,406 @@
+# $Id: panels.pot,v 1.1.2.1 2007/06/02 10:38:29 hass Exp $
+#
+# LANGUAGE translation of Drupal (general)
+# Copyright YEAR NAME <EMAIL@ADDRESS>
+# Generated from files:
+#  panels.module,v 1.10.2.9 2007/03/15 23:13:41 merlinofchaos
+#  threecol_25_50_25_stacked.inc,v 1.5 2006/08/22 23:54:20 merlinofchaos
+#  threecol_33_34_33.inc,v 1.5 2006/08/22 23:54:20 merlinofchaos
+#  threecol_33_34_33_stacked.inc,v 1.5 2006/08/22 23:54:20 merlinofchaos
+#  twocol.inc,v 1.6 2006/08/22 23:54:20 merlinofchaos
+#  twocol_stacked.inc,v 1.5 2006/08/22 23:54:20 merlinofchaos
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2007-05-31 20:59+0100\n"
+"PO-Revision-Date: YYYY-mm-DD HH:MM+ZZZZ\n"
+"Last-Translator: NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <EMAIL@ADDRESS>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+
+#: panels.module:382 content_types/custom.inc:90
+msgid "CSS ID"
+msgstr ""
+
+#: content_types/block.inc:75 content_types/views.inc:123
+msgid "Block"
+msgstr ""
+
+#: layouts/threecol_25_50_25.inc:12 layouts/threecol_25_50_25_stacked.inc:14
+#: layouts/threecol_33_34_33.inc:13 layouts/threecol_33_34_33_stacked.inc:14
+#: layouts/twocol.inc:13 layouts/twocol_stacked.inc:14
+msgid "Left side"
+msgstr ""
+
+#: layouts/threecol_25_50_25.inc:12 layouts/threecol_25_50_25_stacked.inc:14
+#: layouts/threecol_33_34_33.inc:13 layouts/threecol_33_34_33_stacked.inc:14
+msgid "Middle column"
+msgstr ""
+
+#: layouts/threecol_25_50_25.inc:12 layouts/threecol_25_50_25_stacked.inc:14
+#: layouts/threecol_33_34_33.inc:13 layouts/threecol_33_34_33_stacked.inc:14
+#: layouts/twocol.inc:13 layouts/twocol_stacked.inc:14
+msgid "Right side"
+msgstr ""
+
+#: layouts/threecol_25_50_25_stacked.inc:14
+#: layouts/threecol_33_34_33_stacked.inc:14 layouts/twocol_stacked.inc:14
+msgid "Top"
+msgstr ""
+
+#: layouts/threecol_25_50_25_stacked.inc:14
+#: layouts/threecol_33_34_33_stacked.inc:14 layouts/twocol_stacked.inc:14
+msgid "Bottom"
+msgstr ""
+
+#: content_types/block.inc:79;86
+msgid "Add block"
+msgstr ""
+
+#: content_types/block.inc:107
+msgid "Override title"
+msgstr ""
+
+#: content_types/block.inc:108
+msgid ""
+"If checked, the block title will be overridden with the override title text."
+msgstr ""
+
+#: content_types/block.inc:113
+msgid "Override title text"
+msgstr ""
+
+#: content_types/custom.inc:50
+msgid "Enter an optional title for custom content you define"
+msgstr ""
+
+#: content_types/custom.inc:57;64
+msgid "Add custom"
+msgstr ""
+
+#: content_types/custom.inc:73;74
+msgid "Title"
+msgstr ""
+
+#: content_types/custom.inc:78
+msgid "Body"
+msgstr ""
+
+#: content_types/custom.inc:91
+msgid "CSS ID of this custom content."
+msgstr ""
+
+#: content_types/custom.inc:98
+msgid "CSS class"
+msgstr ""
+
+#: content_types/custom.inc:99
+msgid "CSS class of this custom content."
+msgstr ""
+
+#: content_types/node.inc:42
+msgid "Enter the title or NID of a post"
+msgstr ""
+
+#: content_types/node.inc:50;57
+msgid "Add post"
+msgstr ""
+
+#: content_types/node.inc:68
+msgid "Unable to find \"%s\""
+msgstr ""
+
+#: content_types/node.inc:82
+msgid "Teaser"
+msgstr ""
+
+#: content_types/node.inc:85
+msgid "Check here to show only the node teaser"
+msgstr ""
+
+#: content_types/node.inc:90
+msgid "Display links"
+msgstr ""
+
+#: content_types/node.inc:91
+msgid "Check here to display the links with the post."
+msgstr ""
+
+#: content_types/node.inc:96
+msgid "Suppress node title"
+msgstr ""
+
+#: content_types/node.inc:97
+msgid "Check here to suppress the node title."
+msgstr ""
+
+#: layouts/threecol_25_50_25.inc:8
+msgid "Three column 25/50/25"
+msgstr ""
+
+#: layouts/threecol_25_50_25_stacked.inc:10
+msgid "Three column 25/50/25 stacked"
+msgstr ""
+
+#: layouts/threecol_33_34_33.inc:9
+msgid "Three column 33/34/33"
+msgstr ""
+
+#: layouts/threecol_33_34_33_stacked.inc:10
+msgid "Three column 33/34/33 stacked"
+msgstr ""
+
+#: layouts/twocol.inc:9
+msgid "Two column"
+msgstr ""
+
+#: layouts/twocol_stacked.inc:10
+msgid "Two column stacked"
+msgstr ""
+
+#: panels.module:11
+msgid ""
+"<p>You may peruse a list of your current panels layouts and edit them, or "
+"click add to create a new page.</p>"
+msgstr ""
+
+#: panels.module:13
+msgid "<p>Choose a layout for your new page from the list below.</p>"
+msgstr ""
+
+#: panels.module:60 panels.info:0
+msgid "Panels"
+msgstr ""
+
+#: panels.module:63
+msgid "Create pages on your site that are 2 or 3 columns"
+msgstr ""
+
+#: panels.module:67
+msgid "List"
+msgstr ""
+
+#: panels.module:75;82
+msgid "Add"
+msgstr ""
+
+#: panels.module:89
+msgid "Edit panels"
+msgstr ""
+
+#: panels.module:96
+msgid "Delete panels"
+msgstr ""
+
+#: panels.module:105
+msgid "Autocomplete node"
+msgstr ""
+
+#: panels.module:199
+msgid "Edit"
+msgstr ""
+
+#: panels.module:200;228
+msgid "Delete"
+msgstr ""
+
+#: panels.module:205
+msgid "Panel title"
+msgstr ""
+
+#: panels.module:206
+msgid "URL"
+msgstr ""
+
+#: panels.module:207
+msgid "Operations"
+msgstr ""
+
+#: panels.module:225
+msgid "Are you sure you want to delete %title?"
+msgstr ""
+
+#: panels.module:227
+msgid "This action cannot be undone."
+msgstr ""
+
+#: panels.module:228
+msgid "Cancel"
+msgstr ""
+
+#: panels.module:308
+msgid "Add content"
+msgstr ""
+
+#: panels.module:310
+msgid ""
+"Select an area to add content to, then select a type of content and click "
+"the appropriate button. The content will be added."
+msgstr ""
+
+#: panels.module:319
+msgid "Area"
+msgstr ""
+
+#: panels.module:358
+msgid "General information"
+msgstr ""
+
+#: panels.module:375
+msgid "Page title"
+msgstr ""
+
+#: panels.module:376
+msgid "The page title for this panels layout"
+msgstr ""
+
+#: panels.module:383
+msgid "The CSS ID to apply to this page"
+msgstr ""
+
+#: panels.module:394
+msgid "Access"
+msgstr ""
+
+#: panels.module:397
+msgid ""
+"Only the checked roles will be able to see this panel in any form; if no "
+"roles are checked, access will not be restricted."
+msgstr ""
+
+#: panels.module:403
+msgid "Path"
+msgstr ""
+
+#: panels.module:404
+msgid "The URL path to give this page, i.e, path/to/page"
+msgstr ""
+
+#: panels.module:508
+msgid "Save"
+msgstr ""
+
+#: panels.module:527
+msgid "This area has no content."
+msgstr ""
+
+#: panels.module:550
+msgid "Configure"
+msgstr ""
+
+#: panels.module:599
+msgid "The panels has been saved."
+msgstr ""
+
+#: panels.module:607
+msgid "Delete this item"
+msgstr ""
+
+#: panels.module:613
+msgid "Move item up"
+msgstr ""
+
+#: panels.module:614
+msgid "Move item down"
+msgstr ""
+
+#: panels.module:749
+msgid "Unable to find requested layout %s"
+msgstr ""
+
+#: panels.module:853
+msgid "by %user"
+msgstr ""
+
+#: panels.module:749;0 panels.info:0
+msgid "panels"
+msgstr ""
+
+#: panels.module:21
+msgid "create panels"
+msgstr ""
+
+#: panels.module:21
+msgid "access all panels"
+msgstr ""
+
+#: panels.info:0
+msgid "Create pages that are divided into areas of the page."
+msgstr ""
+
+#: content_types/views.inc:86
+msgid "Choose a view from the views module"
+msgstr ""
+
+#: content_types/views.inc:90;97
+msgid "Add view"
+msgstr ""
+
+#: content_types/views.inc:121
+msgid "View type"
+msgstr ""
+
+#: content_types/views.inc:122
+msgid "Select which type of the view to display."
+msgstr ""
+
+#: content_types/views.inc:123
+msgid "Page"
+msgstr ""
+
+#: content_types/views.inc:123
+msgid "Embedded"
+msgstr ""
+
+#: content_types/views.inc:128
+msgid "Pager ID"
+msgstr ""
+
+#: content_types/views.inc:130
+msgid ""
+"Select the numeric pager ID to use, or 0 to not have use paging. Select \"1"
+"\" if you aren't sure what this means"
+msgstr ""
+
+#: content_types/views.inc:136
+msgid "Posts to Display"
+msgstr ""
+
+#: content_types/views.inc:138
+msgid "Select the number of posts to display, or 0 to display all results."
+msgstr ""
+
+#: content_types/views.inc:144
+msgid "View arguments"
+msgstr ""
+
+#: content_types/views.inc:146
+msgid ""
+"Arguments to send to the view as if they were part of the URL in the form of "
+"arg1/arg2/arg3. You can use %0, %1, %2, etc, to use arguments from the "
+"actual URL. For example, if your panel URL is foo/bar, and someone hits foo/"
+"bar/5 use %2 to get the 5."
+msgstr ""
+
+#: content_types/views.inc:152
+msgid "Override URL"
+msgstr ""
+
+#: content_types/views.inc:154
+msgid ""
+"If this is set, override the View URL; this can sometimes be useful to set "
+"to the panel URL"
+msgstr ""
+
+#: content_types/views.inc:160
+msgid "Display view title"
+msgstr ""
+
+#: content_types/views.inc:161
+msgid "If checked, the title of the view will be displayed."
+msgstr ""
