types/link-definition.js

import Type    from './type';
import XRegExp from 'xregexp';

/**
 * A line representing a URL that will be referenced and linked elsewhere in the
 * document
 *
 * @class LinkDefinition
 * @extends Type
 */
export default class LinkDefinition extends Type {
  get isSummarized() {
    return false;
  }

  toMarkdown(prev, next) {
    let markdown = `[${this.meta.id}]: ${this.meta.url}`;

    if (this.meta.title) {
      markdown += ` "${this.meta.title}"`;
    }

    return markdown + (next ? '\n' : '');
  }

  /**
   * @static
   * @see Type.markdownPattern
   */
  static get markdownPattern() {
    return XRegExp(`^
      \\[(?<meta_id>\\S+)\\]:\\s+
      (?<meta_url>[\\S]+)
      (?:\\s+"(?<meta_title>[^"]+)")?`, 'x');
  }

  /**
   * @static
   * @see Type.type
   */
  static get type() {
    return 'link-definition';
  }
}