Index: dynamicload.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/jstools/dynamicload/dynamicload.install,v
retrieving revision 1.4
diff -u -r1.4 dynamicload.install
--- dynamicload.install	13 May 2007 03:50:53 -0000	1.4
+++ dynamicload.install	13 May 2007 03:54:52 -0000
@@ -13,6 +13,7 @@
         delta varchar(32) NOT NULL,
         refresh int NOT NULL default '0',
         refresh_interval int NOT NULL default '0',
+        scroll int NOT NULL default '0',
         apply int NOT NULL default '0',
         target varchar(128) NOT NULL default '',
         method int NOT NULL default '0',
@@ -25,6 +26,7 @@
         delta varchar(32) NOT NULL,
         refresh int NOT NULL default '0',
         refresh_interval int NOT NULL default '0',
+        scroll int NOT NULL default '0',
         apply int NOT NULL default '0',
         target varchar(128) NOT NULL default '',
         method int NOT NULL default '0',
@@ -70,4 +72,19 @@
 
   }
   return $ret;
+}
+
+function dynamicload_update_4() {
+  $ret = array();
+  switch ($GLOBALS['db_type']) {
+    case 'mysql':
+    case 'mysqli':
+      $ret[] = update_sql("ALTER TABLE {dynamicload_blocks} ADD scroll int NOT NULL default '0'");
+      break;
+    case 'pgsql':
+      db_add_column($ret, 'dynamicload_blocks', 'scroll', 'int', array('not null' => TRUE, 'default' => 0));
+      break;
+
+  }
+  return $ret;
 }
\ No newline at end of file
Index: dynamicload.js
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/jstools/dynamicload/dynamicload.js,v
retrieving revision 1.24
diff -u -r1.24 dynamicload.js
--- dynamicload.js	13 May 2007 03:50:53 -0000	1.24
+++ dynamicload.js	13 May 2007 20:39:13 -0000
@@ -111,7 +111,7 @@
               break;
           }
           if (settings.show) {
-            $(settings.target).slideIn('slow');
+            $(settings.target).slideDown('slow');
           }
         }
         else {
@@ -148,9 +148,51 @@
     success: function(response){
       response = Drupal.parseJson(response);
       if (response.result) {
-        $(selector)
-          .after(response.content)
-          .remove();
+        // If there are list items and we're set to scroll, slide in the new ones and slide out the old ones.
+        var count = $(selector + ' div.item-list li').size();
+        if (Drupal.settings.dynamicload.settings[module + '_' + delta].scroll && count) {
+
+          $(selector)
+            .after('<div id="dynamicload-newblock"></div>')
+            .next('#dynamicload-newblock')
+            .hide()
+            .append(response.content)
+            .each(function () {
+              var newItems = $(this).find('div.item-list ul:first > li').addClass('is-new').hide();
+            })
+            .end()
+            .find('div.item-list ul:first')
+            .prepend(newItems)
+            .find('> li:not(.is-new)')
+            .addClass('is-old')
+            .each(function () {
+              var oldElt = this;
+              var oldHref = href = $(this).find('a:first').attr('href');
+              $(this).siblings('.is-new').each(function () {
+                if ($(this).find('a:first').attr('href') == oldHref) {
+                  $(oldElt).removeClass('is-old').html($(this).html());
+                  $(this).remove();
+                }
+              })
+            })
+            .end()
+            .find('li.is-new')
+            .slideDown('slow')
+            .end()
+            .find('li.is-old')
+            .slideUp('slow', function() {
+              $(this).remove();
+            })
+            .end()
+            .next('#dynamicload-newblock')
+            .remove();
+        }
+        // Otherwise simply replace the existing block.
+        else {
+          $(selector)
+            .after(response.content)
+            .remove();
+        }
       }
     }
   });
Index: dynamicload.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/jstools/dynamicload/dynamicload.module,v
retrieving revision 1.30
diff -u -r1.30 dynamicload.module
--- dynamicload.module	13 May 2007 03:50:53 -0000	1.30
+++ dynamicload.module	13 May 2007 20:49:11 -0000
@@ -165,6 +165,12 @@
       '#default_value' => $settings['refresh_interval'] ? $settings['refresh_interval'] : 30000,
       '#options' => array(5000 => t('five seconds'), 10000 => t('ten seconds'), 30000 => t('thirty seconds'), 60000 => t('one minute'), 120000 => t('two minutes'), 180000 => t('three minutes'), 300000 => t('five minutes'), 600000 => t('ten minutes')),
     );
+    $form['dynamicload']['dynamicload_scroll'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Scroll in new items'),
+      '#description' => t('Check if you want new items for this block to scroll in ticker-style as they arrive (with the oldest item scrolling out). If this option is not checked, the whole block will refresh. Note: only works for items that come in as a list (using an HTML ul element).)'),
+      '#default_value' => $settings['scroll'] ? 1 : 0
+    );
   }
 }
 
@@ -173,11 +179,11 @@
  */
 function dynamicload_submit($form_id, $form_values) {
   if (db_num_rows(db_query("SELECT * FROM {dynamicload_blocks} WHERE module = '%s' AND delta = %d", $form_values['module'], $form_values['delta']))) {
-    db_query("UPDATE {dynamicload_blocks} SET refresh = %d, refresh_interval = %d, apply = %d, target = '%s', method = %d WHERE module = '%s' AND delta = %d", $form_values['dynamicload_refresh'], $form_values['dynamicload_refresh_interval'], $form_values['dynamicload_apply'], $form_values['dynamicload_target'], $form_values['dynamicload_method'], $form_values['module'], $form_values['delta']);
+    db_query("UPDATE {dynamicload_blocks} SET refresh = %d, refresh_interval = %d, scroll = %d, apply = %d, target = '%s', method = %d WHERE module = '%s' AND delta = %d", $form_values['dynamicload_refresh'], $form_values['dynamicload_refresh_interval'], $form_values['dynamicload_scroll'], $form_values['dynamicload_apply'], $form_values['dynamicload_target'], $form_values['dynamicload_method'], $form_values['module'], $form_values['delta']);
     drupal_set_message(t('Dynamic loading block data updated.'));
   }
   else {
-    db_query("INSERT INTO {dynamicload_blocks} (module, delta, refresh, refresh_interval, apply, target, method) VALUES ('%s', %d, %d, %d, %d, '%s', %d)", $form_values['module'], $form_values['delta'], $form_values['dynamicload_refresh'], $form_values['dynamicload_refresh_interval'], $form_values['dynamicload_apply'], $form_values['dynamicload_target'], $form_values['dynamicload_method']);
+    db_query("INSERT INTO {dynamicload_blocks} (module, delta, refresh, refresh_interval, scroll, apply, target, method) VALUES ('%s', %d, %d, %d, %d, %d, '%s', %d)", $form_values['module'], $form_values['delta'], $form_values['dynamicload_refresh'], $form_values['dynamicload_refresh_interval'], $form_values['dynamicload_scroll'], $form_values['dynamicload_apply'], $form_values['dynamicload_target'], $form_values['dynamicload_method']);
     drupal_set_message(t('Dynamic loading block data saved.'));
   }
 }
