Index: dynamicload.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/jstools/dynamicload/dynamicload.install,v
retrieving revision 1.3
diff -u -r1.3 dynamicload.install
--- dynamicload.install	22 Feb 2007 16:11:36 -0000	1.3
+++ dynamicload.install	12 Mar 2007 23:41:45 -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 '',
         PRIMARY KEY (module, delta)
@@ -24,6 +25,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 '',
         PRIMARY KEY (module, delta)
@@ -53,4 +55,19 @@
 
   }
   return $ret;
+}
+
+function dynamicload_update_3() {
+  $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.19
diff -u -r1.19 dynamicload.js
--- dynamicload.js	12 Mar 2007 02:08:06 -0000	1.19
+++ dynamicload.js	12 Mar 2007 23:50:05 -0000
@@ -112,9 +112,54 @@
     success: function(response){
       response = Drupal.parseJson(response);
       if (response.result) {
-        $(selector)
-          .after(response.content)
-          .remove();
+        // If there are list items, fade in the new ones.
+        var count = $(selector + ' div.item-list li').size();
+        if (Drupal.settings.dynamicload.settings[module + '_' + delta].scroll && count) {
+          var firstHref = $(selector + ' div.item-list li:first a:first').attr('href');
+          var isNew = true;
+          var newElts = [];
+          $(selector)
+            .attr('id', 'dynamicload-old')
+            .after(response.content)
+            .next('div.block')
+            .hide()
+            .find('div.item-list ul:first > li')
+            .each(function () {
+              if (isNew && ($(this).find('a:first').attr('href') != firstHref)) {
+                newElts.push($(this).clone());
+              }
+              else {
+                isNew = false;
+              }
+            })
+            .end()
+            .end()
+            .find('div.item-list:first ul:first')
+            .each(function () {
+              for (var i in newElts) {
+                // Append and fade in the new content.
+                $(this).prepend(newElts[i]);
+                $(newElts[i]).fadeIn('slow');
+                // Remove the old content.
+                // If it's the last old content to be removed, replace the old block with the new one.
+                if (i == (newElts.length - 1)) {
+                  $(this).find('li:last-child').fadeOut('slow', function () {
+                    $('#dynamicload-old').remove();
+                    $(selector).show();
+                  });
+                }
+                else {
+                  $(this).find('li:last-child').fadeOut('slow', function () {$(this).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.28
diff -u -r1.28 dynamicload.module
--- dynamicload.module	12 Mar 2007 17:16:50 -0000	1.28
+++ dynamicload.module	12 Mar 2007 23:39:58 -0000
@@ -120,13 +120,19 @@
       '#title' => t('Automatically refresh this block'),
       '#default_value' => $settings['refresh'] ? 1 : 0
     );
-  $form['dynamicload']['dynamicload_refresh_interval'] = array(
+    $form['dynamicload']['dynamicload_refresh_interval'] = array(
       '#type' => 'select',
       '#title' => t('Block refresh interval'),
       '#description' => t('Select the interval at which this block should refresh.'),
       '#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 fade in ticker-style as they arrive (with the oldest item fading out). If this option is not checked, the whole block will refresh.'),
+      '#default_value' => $settings['scroll'] ? 1 : 0
+    );
   }
 }
 
@@ -135,11 +141,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' 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['module'], $form_values['delta']);
+    db_query("UPDATE {dynamicload_blocks} SET refresh = %d, refresh_interval = %d, scroll = %d, apply = %d, target = '%s' 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['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) VALUES ('%s', %d, %d, %d, %d, '%s')", $form_values['module'], $form_values['delta'], $form_values['dynamicload_refresh'], $form_values['dynamicload_refresh_interval'], $form_values['dynamicload_apply'], $form_values['dynamicload_target']);
+    db_query("INSERT INTO {dynamicload_blocks} (module, delta, refresh, refresh_interval, apply, target) VALUES ('%s', %d, %d, %d, %d, '%s')", $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']);
     drupal_set_message(t('Dynamic loading block data saved.'));
   }
 }
