Index: README.txt
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/render/README.txt,v
retrieving revision 1.3
diff -u -p -r1.3 README.txt
--- README.txt	29 Jan 2008 23:47:44 -0000	1.3
+++ README.txt	9 Sep 2008 11:20:17 -0000
@@ -15,7 +15,7 @@ Bug reports, feature suggestions and lat
 
 -- REQUIREMENTS --
 
-None.
+* None.
 
 
 -- INSTALLATION --
@@ -58,9 +58,14 @@ None.
 Current maintainers:
 * Daniel F. Kudwien (sun) - dev@unleashedmind.com
 
+Previous maintainers:
+* Jeff Robbins (jjeff)
+
 This project has been sponsored by:
 * UNLEASHED MIND
   Specialized in consulting and planning of Drupal powered sites, UNLEASHED
   MIND offers installation, development, theming, customization, and hosting
   to get you started. Visit http://www.unleashedmind.com for more information.
 
+* Bryght
+  Visit http://www.bryght.com for more information.
Index: render.info
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/render/render.info,v
retrieving revision 1.3
diff -u -p -r1.3 render.info
--- render.info	9 Sep 2008 11:13:26 -0000	1.3
+++ render.info	9 Sep 2008 12:11:10 -0000
@@ -1,5 +1,5 @@
 ; $Id: render.info,v 1.3 2008/09/09 11:13:26 sun Exp $
 name = Dynamic Rendering
-description = "Administrative interface for various CSS/JS-based rendering technologies." 
+description = Administrative interface for various CSS/JS-based rendering technologies."
 package = User interface
 core = 6.x
Index: render.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/render/render.module,v
retrieving revision 1.7
diff -u -p -r1.7 render.module
--- render.module	9 Sep 2008 11:13:26 -0000	1.7
+++ render.module	9 Sep 2008 12:20:33 -0000
@@ -3,18 +3,9 @@
 
 /**
  * @file
- * Dynamic Rendering Module for Drupal
- * 
  * Implements an administrative interface for various CSS/JS-based rendering
  * technologies.
  * 
- * @authors
- *   Daniel F. Kudwien (sun)
- *   Jeff Robbins (jjeff)
- * Development sponsored by
- *   unleashed mind <www.unleashedmind.com>
- *   Bryght <www.bryght.com>
- * 
  * @todo Implement generic download handler for all generated files.
  * @todo Allow different rules for each site.
  */
@@ -90,7 +81,6 @@ function render_menu() {
     'type' => MENU_CALLBACK,
     'weight' => 6,
   );
-  
   return $items;
 }
 
@@ -129,7 +119,7 @@ function render_plugins() {
 }
 
 /**
- * List the rules
+ * List the rules.
  */
 function render_rules() {
   $plugins = render_plugins();
@@ -224,7 +214,7 @@ function render_cache_clear($redirect = 
 }
 
 /**
- * Manage font files.
+ * Manage font files page; menu callback.
  */
 function render_manage() {
   drupal_set_title(t('Manage fonts'));
@@ -238,8 +228,7 @@ function render_manage() {
       l($delimg .' '. t('delete'), 'admin/settings/render/deletefont/'. urlencode($file), array('html' => TRUE)),
     );
   }
-  $output .= theme('table', $header, $rows, array('style' => 'width:100%'));
-  
+  $output = theme('table', $header, $rows, array('style' => 'width:100%'));
   $output .= drupal_get_form('render_upload');
   return $output;
 }
@@ -284,11 +273,17 @@ function render_upload() {
   return $form;
 }
 
+/**
+ * Form validation callback for render_upload form.
+ */
 function render_upload_validate($form, &$form_state) {
   // @todo Implement file mime type info in render plugins and return FALSE
   // here, if the uploaded file is not supported by at least one plugin.
 }
 
+/**
+ * Form submit callback for render_upload form.
+ */
 function render_upload_submit($form, &$form_state) {
   $dir = file_create_path('render');
   // Creates directory if needed.
@@ -313,7 +308,6 @@ function render_upload_submit($form, &$f
  */
 function render_add_rule() {
   $form = array();
-  
   $form['plugin_select'] = array(
     '#type' => 'fieldset',
     '#title' => t('Available plugins'),
@@ -335,15 +329,16 @@ function render_add_rule() {
       }
     }
   }
-  
   $form['submit'] = array(
     '#type' => 'submit',
     '#value' => t('Next'),
   );
-  
   return $form;
 }
 
+/**
+ * Form submit callback for render_add_rule form.
+ */
 function render_add_rule_submit($form, &$form_state) {
   if (isset($form_state['values']['plugin'])) {
     drupal_goto('admin/settings/render/edit/'. check_plain($form_state['values']['plugin']));
@@ -351,17 +346,17 @@ function render_add_rule_submit($form, &
 }
 
 /**
- * Edit a rendering rule.
+ * Edit a rendering rule; menu callback.
  *
  * @param $edit
- * an array or object of rule parameters
+ *   An array or object of rule parameters.
  *
  * @return
- * the rendered form
+ *   A form to edit a rule.
  */
 function render_edit_rule($edit = NULL) {
   if (is_numeric($edit)) {
-    if ($_POST['op'] == t('Delete')) {
+    if (isset($_POST['op']) && $_POST['op'] == t('Delete')) {
       drupal_goto('admin/settings/render/rules/delete/'. $edit);
     }
     else {
@@ -371,8 +366,8 @@ function render_edit_rule($edit = NULL) 
   else if (is_string($edit)) {
     $rule['plugin'] = check_plain($edit);
   }
-  $font_select = $rule       = (array)$rule;
-  $rules                     = array();
+  $font_select = $rule = (array)$rule;
+  $rules = array();
   
   // Override font colors for font selection.
   $font_select['color']      = '#000000';
@@ -403,8 +398,14 @@ function render_edit_rule($edit = NULL) 
   return drupal_get_form('render_rule', $rule);
 }
 
+/**
+ * Form builder function for add/edit rule form.
+ *
+ * @param $edit
+ *   An array containing a rendering rule.
+ */
 function render_rule(&$form_state, $edit) {
-  if ($edit['rid']) {
+  if (!empty($edit['rid'])) {
     $form['rid'] = array(
       '#type' => 'hidden',
       '#value' => $edit['rid'],
@@ -414,6 +415,13 @@ function render_rule(&$form_state, $edit
   else {
     drupal_set_title(t('Add a new rendering rule'));
   }
+  $edit += array(
+    'name' => '',
+    'selector' => '',
+    'font' => '',
+    'weight' => 0,
+  );
+
   $form['plugin'] = array(
     '#type' => 'value',
     '#value' => $edit['plugin'],
@@ -474,7 +482,7 @@ function render_rule(&$form_state, $edit
     '#title' => t('Weight'),
     '#description' => t('You can adjust the order in which the rules are executed by changing their weights. Lighter items are executed before heavier.'),
     '#delta' => 10,
-    '#default_value' => isset($edit['weight']) ? $edit['weight'] : 0,
+    '#default_value' => $edit['weight'],
   );
   
   $function = $edit['plugin'] .'_render_rule';
@@ -487,18 +495,24 @@ function render_rule(&$form_state, $edit
     '#suffix' => '</div>',
   );
   $form['submits'][] = array('#type' => 'submit', '#value' => t('Submit'));
-  if ($edit['rid']) {
+  if (!empty($edit['rid'])) {
     $form['submits'][] = array('#type' => 'button', '#value' => t('Delete'));
   }
   
   return $form;
 }
 
+/**
+ * Form submit callback for render_rule form.
+ */
 function render_rule_submit($form, &$form_state) {
   render_save_rule($form_state['values']);
   $form_state['redirect'] = 'admin/settings/render';
 }
 
+/**
+ * Form builder function for delete rule form.
+ */
 function render_delete_rule_form(&$form_state, $rid = NULL) {
   if (!isset($rid) || !($rule = render_load_rule($rid))) {
     drupal_goto('admin/settings/render');
@@ -511,6 +525,9 @@ function render_delete_rule_form(&$form_
   return confirm_form($form, t('Are you sure you want to delete the rule %rule?', array('%rule' => $rule['name'])), 'admin/settings/render');
 };
 
+/**
+ * Form submit callback for delete rule form.
+ */
 function render_delete_rule_form_submit($form, &$form_state) {
   if ($form_state['values']['op'] == t('Confirm')) {
     $rule = render_load_rule($form_state['values']['rid']);
@@ -523,6 +540,9 @@ function render_delete_rule_form_submit(
   $form_state['redirect'] = 'admin/settings/render';
 }
 
+/**
+ * Delete font page; menu callback.
+ */
 function render_fontdelete_confirm() {
   $args = func_get_args();
   $fontfile = implode('/', $args);
@@ -533,10 +553,16 @@ function render_fontdelete_confirm() {
   return drupal_get_form('render_fontdelete_confirm_form', $fontfile);
 }
 
-function render_fontdelete_confirm_form($fontfile) {
+/**
+ * Form builder function for delete font form.
+ */
+function render_fontdelete_confirm_form(&$form_state, $fontfile) {
   return confirm_form(array('render_fontfile' => array('#type' => 'hidden', '#value' => $fontfile)), t("Are you sure you want to delete the file &quot;%fontfile&quot;?", array('%fontfile' => $fontfile)), 'admin/settings/render/manage');
 }
 
+/**
+ * Form submit callback for delete font form.
+ */
 function render_fontdelete_confirm_form_submit($form, &$form_state) {
   if ($form_state['values']['op'] == t('Confirm')) {
     render_font_delete($form_state['values']['render_fontfile']);
@@ -545,6 +571,18 @@ function render_fontdelete_confirm_form_
 }
 
 /**
+ * Delete a font file.
+ */
+function render_font_delete($fontfile) {
+  if (file_delete($fontfile)) {
+    drupal_set_message(t('The font %file has been deleted.', array('%file' => $fontfile)));
+  }
+  else {
+    drupal_set_message(t('There was a problem deleting the font file.'), 'error');
+  }
+}
+
+/**
  * Return form radio items for font selection.
  * 
  * @param array $form
@@ -554,7 +592,7 @@ function render_fontdelete_confirm_form_
  */
 function render_font_select($form, $field) {
   $fonts = render_get_fonts($form['plugin']);
-  
+
   $font_select = array();
   foreach ($fonts as $path => $filename) {
     $name = substr($filename, 0, strrpos($filename, '.'));
@@ -565,7 +603,6 @@ function render_font_select($form, $fiel
       '#default_value' => $form[$field],
     );
   }
-  
   return $font_select;
 }
 
@@ -645,10 +682,7 @@ function render_get_rules($plugin = NULL
 }
 
 /**
- * Get an individual rule
- *
- * @return object
- * the rule
+ * Fetch a rule from the database.
  */
 function render_load_rule($rid) {
   $rule = db_fetch_array(db_query('SELECT * FROM {render} WHERE rid = %d', $rid));
@@ -661,14 +695,14 @@ function render_load_rule($rid) {
 }
 
 /**
- * Save a rule into the db
+ * Save a rule in the database.
  *
- * @param array $edit
- * the edit array from the rule add/edit form
+ * @param $edit
+ *   An array from the rule add/edit form.
  */
 function render_save_rule($edit) {
   $edit = (array)$edit;
-  if ($edit['rid']) {
+  if (!empty($edit['rid'])) {
     db_query('DELETE FROM {render} WHERE rid = %d', $edit['rid']);
   }
   
@@ -684,7 +718,7 @@ function render_save_rule($edit) {
   
   foreach ($edit as $key => $val) {
     if (in_array($key, _render_fields())) {
-      // only save keyed values
+      // Only save keyed values.
       if (!is_numeric($key)) {
         if (is_numeric($val)) {
           if (is_float(0 + $val)) {
@@ -734,15 +768,6 @@ function render_duplicate_rule($rid) {
   drupal_goto('admin/settings/render');
 }
 
-function render_font_delete($fontfile) {
-  if (file_delete($fontfile)) {
-    drupal_set_message(t('The font %file has been deleted.', array('%file' => $fontfile)));
-  }
-  else {
-    drupal_set_message(t('There was a problem deleting the font file.'), 'error');
-  }
-}
-
 /**
  * Find the directory of each plugin and save locations in a variable.
  *
@@ -1013,6 +1038,9 @@ function render_octet_download() {
   }
 }
 
+/**
+ * Return database fields that make up a rendering rule.
+ */
 function _render_fields() {
   return array('rid', 'plugin', 'name', 'selector', 'properties', 'weight');
 }
Index: plugins/sifr.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/render/plugins/sifr.inc,v
retrieving revision 1.4
diff -u -p -r1.4 sifr.inc
--- plugins/sifr.inc	4 Jun 2008 02:16:55 -0000	1.4
+++ plugins/sifr.inc	9 Sep 2008 12:07:57 -0000
@@ -99,7 +99,8 @@ function sifr_render_rules($rule) {
   $fontstyle['colors'] = array(
     'color' => $rule['color'],
     'linkcolor' => $rule['linkcolor'],
-    'hovercolor' => $rule['hovercolor'],
+    // Hover color breaks sIFR in newer Flash versions. @see #224713
+    // 'hovercolor' => $rule['hovercolor'],
     'bgcolor' => $rule['bgcolor'],
   );
   
@@ -115,6 +116,14 @@ function sifr_render_rules($rule) {
  *   User values for the form.
  */
 function sifr_render_rule(&$form, $edit) {
+  $info = sifr_render_info();
+  // array_fill_keys() available on PHP 5.2+ only.
+  foreach ($info['properties'] as $key) {
+    if (!isset($edit[$key])) {
+      $edit[$key] = '';
+    }
+  }
+
   $form['font'] = array(
     '#type' => 'fieldset',
     '#title' => t('Font'),
@@ -268,9 +277,18 @@ function sifr_render_rule(&$form, $edit)
  */
 function sifr_render_render_rule_js($rule) {
   $properties = array();
+  $info = sifr_render_info();
+  // array_fill_keys() available on PHP 5.2+ only.
+  foreach ($info['properties'] as $key) {
+    if (!isset($rule[$key])) {
+      $rule[$key] = '';
+    }
+  }
+
   // Convert spaces in filename.
   $fontpath = base_path() . str_replace('%2F', '/', rawurlencode($rule['font']));
   $properties['sFlashSrc']      = $fontpath;
+
   $properties['sColor']         = $rule['color'];
   $properties['sLinkColor']     = $rule['linkcolor'];
   // Hover color breaks sIFR in newer Flash versions. @see #224713
