If we look at recent history, we see that my old mate @bangpound has quietly dropped off the (Drupal) planet.
( @bangpound collaborated with @mlncn, @catch and myself a full decade ago, on a fascinating academic Drupal project )

Drupal.org account (and twitter) have been withdrawn, and although some activities continue elsewhere, they are not continuing here.
I won't delve further into those decisions further than that here, but I think we can read it as a goodbye for now.

BUT, I do have some affection for oEmbed module, and oEmbed as a web content strategy in general. I've tried to use and nudge it along where possible in the past, though not to any great effect.

I have some experience, and a lot of opinions on how embedding can be made easier for editors, at the same time as making it more resilient to future API changes and archiving needs, and I think that (richly annotated) oEmbed is a large part of that strategy.
Previous work in this field (half sandboxes for client work)

We can see that no currently active Drupal.org community member has touched this module for 3 years, and there is weekly interest from the community.
The D8 code I have reviewed so far looks like it's got a huge amount of the structure sitting there and *almost* working. I feel that "the back has been broken" on the upgrade work here, but there are a number of edge cases to be ironed out.

I am volunteering to take on maintainer-ship of this module - at least for an evaluation period of a few months. I'd need to be able to confidently address the obvious issues and get it to a point where it was more approachable for users. I can't make a strong commitment to an ongoing 'stable' state yet, as I can't say if there are good reasons for this to have been abandoned, but I'm optimistic .... and also want to welcome any collaborators.

I'm still considering the implications, and time commitment for this, but would welcome feedback/endorsement at this stage, and would push this request through the process If I still feel confident about this in a week or so.

Comments

dman created an issue. See original summary.

dman’s picture

Issue summary: View changes
dman’s picture

Title: Module Abandoned? - Calling for volunteers » oEmbed Module Abandoned? - Calling for volunteers
dman’s picture

Category: Task » Support request
dman’s picture

Issue summary: View changes
manarth’s picture

+1 for transferring maintainership of the module to dman.
Dman actively maintains a number of Drupal modules, and would be a good steward for taking this module forward.

ugintl’s picture

+1

mglaman’s picture

+1, I just had to custom implement this. Using "alb/oembed": "^1.1" and an adjusted version of the filter, it "just works" for Filter plugin.

<?php

namespace Drupal\glamanate_filters\Plugin\Filter;

use Alb\OEmbed\Simple;
use Drupal\Component\Utility\Html;
use Drupal\filter\FilterProcessResult;
use Drupal\filter\Plugin\FilterBase;

/**
 * Provides a fallback placeholder filter to use for missing filters.
 *
 * The filter system uses this filter to replace missing filters (for example,
 * if a filter module has been disabled) that are still part of defined text
 * formats. It returns an empty string.
 *
 * @Filter(
 *   id = "oembed",
 *   title = @Translation("oEmbed filter"),
 *   description = @Translation("Embeds content for oEmbed-enabled web addresses and turns the rest, and e-mail addresses, into clickable links."),
 *   type = Drupal\filter\Plugin\FilterInterface::TYPE_MARKUP_LANGUAGE,
 *   settings = {
 *     "options" = "",
 *     "autoembed" = true
 *   },
 *   weight = -10
 * )
 */
class FilterOEmbed extends FilterBase {

  const OEMBED_PATTERN_AUTOEMBED = '|^\s*(https?://[^\s"]+)\s*$|im';
  const OEMBED_PATTERN_EMBED_SHORTCODE = '/(.?)\[embed\b(.*?)\](.+?)\[\/embed\](.?)/s';
  const OEMBED_PATTERN_EMBED_UNWRAP = '/<p>\s*+(\[embed\b.*?\].+?\[\/embed\])\s*+<\/p>/s';

  public function prepare($text, $langcode) {
    $text = preg_replace_callback(self::OEMBED_PATTERN_AUTOEMBED, [$this, 'oembed_preg_auto_replace'], $text);
    return $text;
  }

  /**
   * Performs the filter processing.
   *
   * @param string $text
   *   The text string to be filtered.
   * @param string $langcode
   *   The language code of the text to be filtered.
   *
   * @return \Drupal\filter\FilterProcessResult
   *   The filtered text, wrapped in a FilterProcessResult object, and possibly
   *   with associated assets, cacheability metadata and placeholders.
   *
   * @see \Drupal\filter\FilterProcessResult
   */
  public function process($text, $langcode) {

    // Undo auto paragraph around oEmbed shortcodes.
    $text = preg_replace(self::OEMBED_PATTERN_EMBED_UNWRAP, '$1', $text);

    $text = preg_replace_callback(self::OEMBED_PATTERN_EMBED_SHORTCODE, array($this, 'oembed_preg_tag_replace'), $text);

    return new FilterProcessResult($text);
  }

  public function tips($long = FALSE)
  {
    if ($long) {
      return t('Embed content by wrapping a supported URL in [embed] &hellip; [/embed]. Set options such as width and height with attributes [embed width="123" height="456"] &hellip; [/embed]. Unsupported options will be ignored.');
    }
    else {
      return t('Embed content by wrapping a supported URL in [embed] &hellip; [/embed].');
    }
  }

  /**
   * PREG replace callback finds [embed] shortcodes, URLs and request options.
   * @param $match
   * @return string
   */
  private function oembed_preg_tag_replace($match) {

    // allow [[oembed]] syntax for escaping a tag
    if ($match[1] == '[' && $match[4] == ']') {
      return substr($match[0], 1, -1);
    }

    $url = $match[3];

    $shortcode_options = !empty($match[2]) ? self::oembed_parse_attr($match[2]) : array();
    $options = !empty($this->settings['options']) ? self::oembed_parse_attr($this->settings['options']) : array();

    $options = array_merge($options, $shortcode_options);

    return $match[1] . $this->oembed_resolve_link($url, $options) . $match[4];
  }

  /**
   * Retrieve all attributes from the shortcodes tag.
   *
   * @see shortcode_parse_atts in WordPress 3.1.3.
   * @param string $text
   * @return array List of attributes and their value.
   */
  private static function oembed_parse_attr($text) {
    $attributes = array();
    $pattern = '/([\w-]+)\s*=\s*"([^"]*)"(?:\s|$)|([\w-]+)\s*=\s*\'([^\']*)\'(?:\s|$)|([\w-]+)\s*=\s*([^\s\'"]+)(?:\s|$)|"([^"]*)"(?:\s|$)|(\S+)(?:\s|$)/';
    $text = preg_replace("/[\x{00a0}\x{200b}]+/u", " ", $text);
    if (preg_match_all($pattern, $text, $matches, PREG_SET_ORDER)) {
      foreach ($matches as $match) {
        if (!empty($match[1])) {
          $attributes[strtolower($match[1])] = stripcslashes($match[2]);
        }
        elseif (!empty($match[3])) {
          $attributes[strtolower($match[3])] = stripcslashes($match[4]);
        }
        elseif (!empty($match[5])) {
          $attributes[strtolower($match[5])] = stripcslashes($match[6]);
        }
        elseif (isset($match[7]) && strlen($match[7])) {
          $attributes[] = stripcslashes($match[7]);
        }
        elseif (isset($match[8])) {
          $attributes[] = stripcslashes($match[8]);
        }
      }

      // Reject any unclosed HTML elements
      foreach( $attributes as &$value ) {
        if ( false !== strpos( $value, '<' ) ) {
          if ( 1 !== preg_match( '/^[^<]*+(?:<[^>]*+>[^<]*+)*+$/', $value ) ) {
            $value = '';
          }
        }
      }
    } else {
      $attributes = ltrim($text);
    }
    return $attributes;
  }

  /**
   * PREG replace callback finds [embed] shortcodes, URLs and request options.
   *
   * Override in Drupal system variable `oembed_resolve_link_callback`
   *
   * @see MediaInternetOEmbedHandler::preSave().
   *
   * @param string $url
   *   URL to embed.
   * @param array $options
   *   oEmbed request options.
   *
   * @return string
   *   Rendered oEmbed response.
   */
  private function oembed_resolve_link($url, $options = array()) {

    $url = Html::decodeEntities($url);

    $embed = Simple::request($url, $options);

    $return = $embed->getHtml();

    if (empty($return)) {
      $return = $url;
    }

    return new FilterProcessResult($return);
  }

  /**
   * PREG replace callback finds URLs
   * @param $match
   * @return string
   */
  private static function oembed_preg_auto_replace($match) {
    return '[embed]'. $match[1] ."[/embed]\n";
  }
}

ugintl’s picture

@mglaman Can you please explain a little what your code actually does?

mglaman’s picture

@ugintl it's a Filter plugin that provides oEmbed functionality. It's the current port's filter using a different library which is actively supported.

When using "alb/oembed": "^1.1", I had full migration support of oEmbed from D7 -> D8 in my personal blog using that filter, also found https://github.com/mglaman/glamanate.com/blob/master/web/modules/custom/....

This module could easily have an 8.x beta by just changing to a supported library.

adam-delaney’s picture

Do we have an update on this?
+1 for transferring maintainership of the module to dman.

DamienMcKenna’s picture

It has been almost a year since the offer was first made, the official policy for dealing with abandoned projects says to wait two weeks and then transfer the issue to the Project Ownership queue.

joseph.olstad’s picture

Project: oEmbed » Drupal.org project ownership
Version: 8.x-1.x-dev »
Component: Miscellaneous » Ownership transfer
Status: Active » Needs review

this could use a tagged release for the various branches, DMan are you still interested?

apaderno’s picture

Status: Needs review » Postponed (maintainer needs more info)

The project link is https://www.drupal.org/project/oEmbed. I am changing status, waiting for a response from @dman.

apaderno’s picture

I also sent a message to the user who is the current project owner.

Hello Pelle,

I am writing you because Dan (https://www.drupal.org/u/dman) offered to maintain the oEmbed module. Ma you reply to https://www.drupal.org/project/projectownership/issues/2884829 within two weeks? If there aren't replies, the project ownership will be probably passed to Dan.

Best regards,
kiamlaluno
-- Drupal.org webmaster
-- Drupal.org Git maintainer

Notice that, while I asked to reply within two weeks, that doesn't mean any action will be taken right when two weeks are passed.

apaderno’s picture

Category: Support request » Task

I apologize for the delay in replying here. I got an email message as reply to mine, and I read it right today, after setting back my email client.

Sure, pass it on, I’m no longer active in the Drupal world.

Do you need me to do anything?

/ Pelle

If there are other users who are interested, let me know it. I don't see any reply from dman, so I am not sure he wants to be maintainer of the module.

dman’s picture

I’ve not been active doing Drupal stuff for a year. On hiatus, and largely without any development machines.
I plan to get back to / continue with Drupal eventually, but cannot commit to any proper maintenance support of this module at this time. Still following with interest.
Sorry.

apaderno’s picture

Status: Postponed (maintainer needs more info) » Active

Let's see if there are users who will to being the new maintainers. If there aren't volunteers, I think the module should be marked as not supported.

joseph.olstad’s picture

If you can't find anyone else I will take maintainership of oembed and see what I can help push along.
just don't expect miracles for the next 4 months because I am very committed until April 1st.

apaderno’s picture

Title: oEmbed Module Abandoned? - Calling for volunteers » Offering to maintain the oEmbed module
Status: Active » Postponed

I am setting this issue as postponed until April first, 2019.

apaderno’s picture

Status: Postponed » Postponed (maintainer needs more info)

@joseph.olstad Is your offer still valid?

joseph.olstad’s picture

ya sure I'll take ownership of it. I have a D7 client right now using media.

Thanks in advance

apaderno’s picture

Assigned: Unassigned » apaderno
Status: Postponed (maintainer needs more info) » Fixed

I changed ownership as requested.

Status: Fixed » Closed (fixed)

Automatically closed - issue fixed for 2 weeks with no activity.