handler: function()

in tools/api-builder/links-package/inline-tag-defs/linkDocs.js [28:73]


    handler: function(doc, tagName, tagDescription) {
      // Parse out the uri and title
      var tagArgs = parseArgString(tagDescription);
      var unnamedArgs = tagArgs._;
      var uri = unnamedArgs[0];
      var title = tagArgs.title || (unnamedArgs.length > 1 ? unnamedArgs[1] : null);

      // Are there parameters and/or an anchor?
      var matches, paramAnchor = '';
      if (matches = uri.match(/([^\#\?]*)([\#\?].*)/)) {
        uri = matches[1];
        paramAnchor = matches[2];
      }

      // Is this a chapter-relative uri like 'guide/...'?
      if (!uri.match(/^(ts|js|dart)/)) {
        var lang = _self.lang;
        var vers = _self.vers;
        var prevUri = uri;
        uri = path.join(lang, vers, uri);
        var fileName = doc.fileInfo ? (' (' + doc.fileInfo.baseName + ')') : '';
        log.info('Ajusted linkDocs chapter-relative uri' + fileName + ': ' + prevUri + ' -> ' + uri);
      }

      var isValid = false;
      var jadePath = path.join('./public/docs', uri + '.jade');
      var key = path.basename(jadePath, '.jade');
      if ( !fs.existsSync(jadePath)) {
        log.warn(createDocMessage('Invalid docs link (unable to locate jade file: "' + jadePath + '")', doc));
      } else {
        isValid = true;
        if (!title) {
          var jsonFilePath = path.join(path.dirname(jadePath), '_data.json');
          if ( fs.existsSync(jsonFilePath)) {
            var jsonObj = jsonFile.readFileSync(jsonFilePath);
            title = jsonObj[key] && jsonObj[key].title;
          }
        }
      }
      var url = path.join('/docs', uri + '.html' + paramAnchor);
      title = title || key || url;

      return isValid ?
        '<a href="' + url + '">' + title + '</a>' :
        '<span>' + title + '</span>';
    }