Anyone who's using MotionBased to track activities might find this filter useful. We have a mountain bike community site (NoBMoB) where users often post links to their adventures recorded at MotionBased.

This mini module is a filter which automatically replaces links to these activities with a Viewport. Installation is simple:

1. Create a directory under modules named motionbased_viewport.

2. Put the following in motionbased_viewport.module:

<?php

function motionbased_viewport_filter_tips($delta, $format, $long = false) {
  return t('Motionbased links are automatically converted into embedded viewports.');
}

function motionbased_viewport_filter($op, $delta = 0, $format = -1, $text = '') {
  switch ($op) {
    case 'list':
      return array(0 => t('MotionBased Viewport filter'));

    case 'description':
      return t('Motionbased links are automatically converted into embedded viewports.');

    case 'process':
      //'Short' regex
      $text = preg_replace_callback('!(http://)?trail\.motionbased\.com/trail/activity/(\d+)!i', '_motionbased_viewport', $text);
      $text = preg_replace_callback('!(http://)?trail\.motionbased\.com/trail/episode/(\d+)!i', '_motionbased_viewport', $text);
      $text = preg_replace_callback('!(http://)?trail\.motionbased\.com/trail/episode/view\.mb\?episodePk\.pkValue=(\d+)!i', '_motionbased_viewport', $text);
      $text = preg_replace_callback('!(http://)?trail\.motionbased\.com/trail/episode/view\.do\?episodePk\.pkValue=(\d+)!i', '_motionbased_viewport', $text);
      $text = preg_replace_callback('!(http://)?trail\.motionbased\.com/trail/invitation/dashboard\.mb\?episodePk\.pkValue=(\d+)!i', '_motionbased_viewport', $text);

      return $text;

    default:
      return $text;
  }
}

function _motionbased_viewport($match) {
  $episode = $match[2];

  return '<iframe src="http://trail.motionbased.com/trail/invitation/accept.mb?senderPk.pkValue=-3&unitSystemPkValue=1&episodePk.pkValue=' .
         $episode .
         '&backgroundDatasourcePk.pkValue=30&view=portlet"' .
         'width="530px" height="300px" title="MotionBased Activity Viewport" scrolling="no" frameborder="0"></iframe>';
}

?>

3. Put the following in motionbased_viewport.info:

name = MotionBased Viewport
description = "Motionbased links are automatically converted into embedded viewports."
version = VERSION
version = "5.x-0.1-dev"

4. Visit modules admin page and enable the new module.

5. Update your input format configuration as appropriate. Be sure to have this filter above URL.module if you have that installed.