Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gemspec_linker.js « utils « plugins « source_viewer « components « vue_shared « javascripts « assets « app - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 35de8fd13d62fce2d7c694c7cb26fa6206b569f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import { joinPaths } from '~/lib/utils/url_utility';
import { GEM_URL } from '../../constants';
import { createLink, generateHLJSOpenTag } from './dependency_linker_util';

const methodRegex = '.*add_dependency.*|.*add_runtime_dependency.*|.*add_development_dependency.*';
const openTagRegex = generateHLJSOpenTag('string', '(&.*;)');
const closeTagRegex = '&.*</span>';

const DEPENDENCY_REGEX = new RegExp(
  /*
   * Detects gemspec dependencies inside of content that is highlighted by Highlight.js
   * Example: s.add_dependency(<span class="hljs-string">&#x27;rugged&#x27;</span>, <span class="hljs-string">&#x27;~&gt; 0.24.0&#x27;</span>)
   *
   * Group 1 (method)     :  s.add_dependency(
   * Group 2 (delimiter)  :  &#x27;
   * Group 3 (packageName):  rugged
   * Group 4 (closeTag)   :  &#x27;</span>
   * Group 5 (rest)       :  	, <span class="hljs-string">&#x27;~&gt; 0.24.0&#x27;</span>)
   */
  `(${methodRegex})${openTagRegex}(.*)(${closeTagRegex})(.*${closeTagRegex})`,
  'gm',
);

const handleReplace = (method, delimiter, packageName, closeTag, rest) => {
  // eslint-disable-next-line @gitlab/require-i18n-strings
  const openTag = generateHLJSOpenTag('string linked', delimiter);
  const href = joinPaths(GEM_URL, packageName);
  const packageLink = createLink(href, packageName);

  return `${method}${openTag}${packageLink}${closeTag}${rest}`;
};

export default (result) => {
  return result.value.replace(
    DEPENDENCY_REGEX,
    (_, method, delimiter, packageName, closeTag, rest) =>
      handleReplace(method, delimiter, packageName, closeTag, rest),
  );
};