eval method

  1. @override
URL eval (Contexts context)
override

Implementation

@override
URL eval(Contexts context) {
  final Node val = value.eval(context);
  String rootpath;

  if (!isEvald) {
    // Add the rootpath if the URL requires a rewrite
    rootpath = currentFileInfo?.rootpath;
    if (rootpath != null &&
        (val.value is String) &&
        context.pathRequiresRewrite(val.value)) {
      if (val is! Quoted) {
        rootpath = escapePath(rootpath);
      }
      val.value = context.rewritePath(val.value, rootpath);
    } else {
      val.value = context.normalizePath(val.value);
    }

    // Add url args if enabled
    if (isNotEmpty(context.urlArgs)) {
      final RegExp reData = RegExp(r'^\s*data:');
      final Match match = reData.firstMatch(val.value);
      if (match == null) {
        final String delimiter =
            !(val.value as String).contains('?') ? '?' : '&';
        final String urlArgs = delimiter + context.urlArgs;
        if ((val.value as String).contains('#')) {
          val.value = (val.value as String).replaceFirst('#', '$urlArgs#');
        } else {
          val.value += urlArgs;
        }
      }
    }
  }
  return URL(val,
      index: index, currentFileInfo: currentFileInfo, isEvald: true);

// 3.7.1 20180718
//  URL.prototype.eval = function (context) {
//      var val = this.value.eval(context),
//          rootpath;
//
//      if (!this.isEvald) {
//          // Add the rootpath if the URL requires a rewrite
//          rootpath = this.fileInfo() && this.fileInfo().rootpath;
//          if (typeof rootpath === 'string' &&
//              typeof val.value === 'string' &&
//              context.pathRequiresRewrite(val.value)) {
//              if (!val.quote) {
//                  rootpath = escapePath(rootpath);
//              }
//              val.value = context.rewritePath(val.value, rootpath);
//          } else {
//              val.value = context.normalizePath(val.value);
//          }
//
//          // Add url args if enabled
//          if (context.urlArgs) {
//              if (!val.value.match(/^\s*data:/)) {
//                  var delimiter = val.value.indexOf('?') === -1 ? '?' : '&';
//                  var urlArgs = delimiter + context.urlArgs;
//                  if (val.value.indexOf('#') !== -1) {
//                      val.value = val.value.replace('#', urlArgs + '#');
//                  } else {
//                      val.value += urlArgs;
//                  }
//              }
//          }
//      }
//
//      return new URL(val, this.getIndex(), this.fileInfo(), true);
//  };
}