function checkMedia(node, value, getIndex) {
      mediaParser(node.params).walk(/^media-feature$/i, mediaFeatureNode => {
        const mediaName = getMediaFeatureName(mediaFeatureNode),
          parentValue = mediaFeatureNode.parent.value;

        valueParser(value).walk(function(valueNode) {
          // Ignore all non-word valueNode and
          // the values not included in the parentValue string
          if (
            valueNode.type !== "word" ||
            !parentValue.includes(valueNode.value)
          ) {
            return;
          }
          check(
            node,
            getIndex(node),
            valueNode,
            mediaName,
            options ? options.ignoreMediaFeatureNames : {}
          );
        });
        return;
      });
    }
Example #2
0
    root.walkAtRules(/^media$/i, atRule => {
      mediaParser(atRule.params).walk(/^media-feature$/i, mediaFeatureNode => {
        const parent = mediaFeatureNode.parent,
          sourceIndex = mediaFeatureNode.sourceIndex,
          value = mediaFeatureNode.value

        if (isRangeContextMediaFeature(parent.value) || !isStandardSyntaxMediaFeatureName(value) || isCustomMediaQuery(value)) {
          return
        }

        if (optionsMatches(options, "ignoreMediaFeatureNames", value)) {
          return
        }

        if (postcss.vendor.prefix(value) || keywordSets.mediaFeatureNames.has(value.toLowerCase())) {
          return
        }

        report({
          index: atRuleParamIndex(atRule) + sourceIndex,
          message: messages.rejected(value),
          node: atRule,
          ruleName,
          result,
        })
      })
    })
Example #3
0
    root.walkAtRules(/^media$/i, atRule => {
      mediaParser(atRule.params).walk(/^media-feature$/i, mediaFeatureNode => {
        const parent = mediaFeatureNode.parent;
        const sourceIndex = mediaFeatureNode.sourceIndex;
        const value = mediaFeatureNode.value;

        if (
          isRangeContextMediaFeature(parent.value) ||
          !isStandardSyntaxMediaFeatureName(value) ||
          isCustomMediaQuery(value)
        ) {
          return;
        }

        if (matchesStringOrRegExp(value, whitelist)) {
          return;
        }

        report({
          index: atRuleParamIndex(atRule) + sourceIndex,
          message: messages.rejected(value),
          node: atRule,
          ruleName,
          result
        });
      });
    });
Example #4
0
    root.walkAtRules(/^media$/i, atRule => {
      let hasComments = _.get(atRule, "raws.params.raw");
      const mediaRule = hasComments ? hasComments : atRule.params;

      mediaParser(mediaRule).walk(/^media-feature$/i, mediaFeatureNode => {
        const parent = mediaFeatureNode.parent;
        const sourceIndex = mediaFeatureNode.sourceIndex;
        const value = mediaFeatureNode.value;

        if (
          isRangeContextMediaFeature(parent.value) ||
          !isStandardSyntaxMediaFeatureName(value) ||
          isCustomMediaQuery(value)
        ) {
          return;
        }

        const expectedFeatureName =
          expectation === "lower" ? value.toLowerCase() : value.toUpperCase();

        if (value === expectedFeatureName) {
          return;
        }

        if (context.fix) {
          if (hasComments) {
            hasComments =
              hasComments.slice(0, sourceIndex) +
              expectedFeatureName +
              hasComments.slice(sourceIndex + expectedFeatureName.length);
            _.set(atRule, "raws.params.raw", hasComments);
          } else {
            atRule.params =
              atRule.params.slice(0, sourceIndex) +
              expectedFeatureName +
              atRule.params.slice(sourceIndex + expectedFeatureName.length);
          }

          return;
        }

        report({
          index: atRuleParamIndex(atRule) + sourceIndex,
          message: messages.expected(value, expectedFeatureName),
          node: atRule,
          ruleName,
          result
        });
      });
    });
Example #5
0
function parseMediaQuery(params) {
  const mediaParser = require("postcss-media-query-parser").default;

  let result = null;

  try {
    result = mediaParser(params);
  } catch (e) {
    // Ignore bad media queries
    return {
      type: "selector-unknown",
      value: params
    };
  }

  return addTypePrefix(addMissingType(result), "media-");
}
Example #6
0
    root.walkAtRules(/^media$/i, atRule => {
      mediaParser(atRule.params).walk(/^media-feature$/i, mediaFeatureNode => {
        const parent = mediaFeatureNode.parent,
          sourceIndex = mediaFeatureNode.sourceIndex,
          value = mediaFeatureNode.value

        if (isRangeContextMediaFeature(parent.value) || !isStandardSyntaxMediaFeatureName(value) || isCustomMediaQuery(value)) {
          return
        }

        if (!matchesStringOrRegExp(value.toLowerCase(), blacklist)) {
          return
        }

        report({
          index: atRuleParamIndex(atRule) + sourceIndex,
          message: messages.rejected(value),
          node: atRule,
          ruleName,
          result,
        })
      })
    })
Example #7
0
    root.walkAtRules(/^media$/i, atRule => {
      mediaParser(atRule.params).walk(/^media-feature$/i, mediaFeatureNode => {
        const { parent, sourceIndex, value } = mediaFeatureNode

        if (isRangeContextMediaFeature(parent.value)
          || !isStandardSyntaxMediaFeatureName(value)
          || isCustomMediaQuery(value)
        ) { return }

        const expectedFeatureName = expectation === "lower"
          ? value.toLowerCase()
          : value.toUpperCase()

        if (value === expectedFeatureName) { return }

        report({
          index: atRuleParamIndex(atRule) + sourceIndex,
          message: messages.expected(value, expectedFeatureName),
          node: atRule,
          ruleName,
          result,
        })
      })
    })
Example #8
0
function parseMediaQuery(value) {
  const mediaParser = require("postcss-media-query-parser").default;
  const result = addMissingType(mediaParser(value));
  return addTypePrefix(result, "media-");
}