diff options
Diffstat (limited to 'node_modules/postcss-modules-scope')
-rw-r--r-- | node_modules/postcss-modules-scope/README.md | 100 | ||||
-rw-r--r-- | node_modules/postcss-modules-scope/lib/index.js | 183 | ||||
-rw-r--r-- | node_modules/postcss-modules-scope/package.json | 79 |
3 files changed, 0 insertions, 362 deletions
diff --git a/node_modules/postcss-modules-scope/README.md b/node_modules/postcss-modules-scope/README.md deleted file mode 100644 index 7abe23b..0000000 --- a/node_modules/postcss-modules-scope/README.md +++ /dev/null @@ -1,100 +0,0 @@ -# CSS Modules: Scope Locals & Extend - -[](https://travis-ci.org/css-modules/postcss-modules-scope) - -Transforms: - -```css -:local(.continueButton) { - color: green; -} -``` - -into: - -```css -:export { - continueButton: __buttons_continueButton_djd347adcxz9; -} -.__buttons_continueButton_djd347adcxz9 { - color: green; -} -``` - -so it doesn't pollute CSS global scope and can be simply used in JS like so: - -```js -import styles from './buttons.css' -elem.innerHTML = `<button class="${styles.continueButton}">Continue</button>` -``` - -## Composition - -Since we're exporting class names, there's no reason to export only one. This can give us some really useful reuse of styles: - -```css -.globalButtonStyle { - background: white; - border: 1px solid; - border-radius: 0.25rem; -} -.globalButtonStyle:hover { - box-shadow: 0 0 4px -2px; -} -:local(.continueButton) { - compose-with: globalButtonStyle; - color: green; -} -``` - -becomes: - -``` -.globalButtonStyle { - background: white; - border: 1px solid; - border-radius: 0.25rem; -} -.globalButtonStyle:hover { - box-shadow: 0 0 4px -2px; -} -:local(.continueButton) { - compose-with: globalButtonStyle; - color: green; -} -``` - -**Note:** you can also use `composes` as a shorthand for `compose-with` - -## Local-by-default & reuse across files - -You're looking for [CSS Modules](https://github.com/css-modules/css-modules). It uses this plugin as well as a few others, and it's amazing. - -## Building - -``` -npm install -npm test -``` - -[](https://travis-ci.org/css-modules/postcss-modules-scope) - -* Lines: [](https://coveralls.io/r/css-modules/postcss-modules-scope?branch=master) -* Statements: [](http://codecov.io/github/css-modules/postcss-modules-scope?branch=master) - -## Development - -- `npm autotest` will watch `src` and `test` for changes and run the tests, and transpile the ES6 to ES5 on success - -## License - -ISC - -## With thanks - -- Mark Dalgleish -- Tobias Koppers -- Guy Bedford - ---- -Glen Maddern, 2015. diff --git a/node_modules/postcss-modules-scope/lib/index.js b/node_modules/postcss-modules-scope/lib/index.js deleted file mode 100644 index e060712..0000000 --- a/node_modules/postcss-modules-scope/lib/index.js +++ /dev/null @@ -1,183 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _postcss = require('postcss'); - -var _postcss2 = _interopRequireDefault(_postcss); - -var _cssSelectorTokenizer = require('css-selector-tokenizer'); - -var _cssSelectorTokenizer2 = _interopRequireDefault(_cssSelectorTokenizer); - -var hasOwnProperty = Object.prototype.hasOwnProperty; - -function getSingleLocalNamesForComposes(selectors) { - return selectors.nodes.map(function (node) { - if (node.type !== 'selector' || node.nodes.length !== 1) { - throw new Error('composition is only allowed when selector is single :local class name not in "' + _cssSelectorTokenizer2['default'].stringify(selectors) + '"'); - } - node = node.nodes[0]; - if (node.type !== 'nested-pseudo-class' || node.name !== 'local' || node.nodes.length !== 1) { - throw new Error('composition is only allowed when selector is single :local class name not in "' + _cssSelectorTokenizer2['default'].stringify(selectors) + '", "' + _cssSelectorTokenizer2['default'].stringify(node) + '" is weird'); - } - node = node.nodes[0]; - if (node.type !== 'selector' || node.nodes.length !== 1) { - throw new Error('composition is only allowed when selector is single :local class name not in "' + _cssSelectorTokenizer2['default'].stringify(selectors) + '", "' + _cssSelectorTokenizer2['default'].stringify(node) + '" is weird'); - } - node = node.nodes[0]; - if (node.type !== 'class') { - // 'id' is not possible, because you can't compose ids - throw new Error('composition is only allowed when selector is single :local class name not in "' + _cssSelectorTokenizer2['default'].stringify(selectors) + '", "' + _cssSelectorTokenizer2['default'].stringify(node) + '" is weird'); - } - return node.name; - }); -} - -var processor = _postcss2['default'].plugin('postcss-modules-scope', function (options) { - return function (css) { - var generateScopedName = options && options.generateScopedName || processor.generateScopedName; - - var exports = {}; - - function exportScopedName(name) { - var scopedName = generateScopedName(name, css.source.input.from, css.source.input.css); - exports[name] = exports[name] || []; - if (exports[name].indexOf(scopedName) < 0) { - exports[name].push(scopedName); - } - return scopedName; - } - - function localizeNode(node) { - var newNode = Object.create(node); - switch (node.type) { - case 'selector': - newNode.nodes = node.nodes.map(localizeNode); - return newNode; - case 'class': - case 'id': - var scopedName = exportScopedName(node.name); - newNode.name = scopedName; - return newNode; - } - throw new Error(node.type + ' ("' + _cssSelectorTokenizer2['default'].stringify(node) + '") is not allowed in a :local block'); - } - - function traverseNode(node) { - switch (node.type) { - case 'nested-pseudo-class': - if (node.name === 'local') { - if (node.nodes.length !== 1) { - throw new Error('Unexpected comma (",") in :local block'); - } - return localizeNode(node.nodes[0]); - } - /* falls through */ - case 'selectors': - case 'selector': - var newNode = Object.create(node); - newNode.nodes = node.nodes.map(traverseNode); - return newNode; - } - return node; - } - - // Find any :import and remember imported names - var importedNames = {}; - css.walkRules(function (rule) { - if (/^:import\(.+\)$/.test(rule.selector)) { - rule.walkDecls(function (decl) { - importedNames[decl.prop] = true; - }); - } - }); - - // Find any :local classes - css.walkRules(function (rule) { - var selector = _cssSelectorTokenizer2['default'].parse(rule.selector); - var newSelector = traverseNode(selector); - rule.selector = _cssSelectorTokenizer2['default'].stringify(newSelector); - rule.walkDecls(/composes|compose-with/, function (decl) { - var localNames = getSingleLocalNamesForComposes(selector); - var classes = decl.value.split(/\s+/); - classes.forEach(function (className) { - var global = /^global\(([^\)]+)\)$/.exec(className); - if (global) { - localNames.forEach(function (exportedName) { - exports[exportedName].push(global[1]); - }); - } else if (hasOwnProperty.call(importedNames, className)) { - localNames.forEach(function (exportedName) { - exports[exportedName].push(className); - }); - } else if (hasOwnProperty.call(exports, className)) { - localNames.forEach(function (exportedName) { - exports[className].forEach(function (item) { - exports[exportedName].push(item); - }); - }); - } else { - throw decl.error('referenced class name "' + className + '" in ' + decl.prop + ' not found'); - } - }); - decl.remove(); - }); - - rule.walkDecls(function (decl) { - var tokens = decl.value.split(/(,|'[^']*'|"[^"]*")/); - tokens = tokens.map(function (token, idx) { - if (idx === 0 || tokens[idx - 1] === ',') { - var localMatch = /^(\s*):local\s*\((.+?)\)/.exec(token); - if (localMatch) { - return localMatch[1] + exportScopedName(localMatch[2]) + token.substr(localMatch[0].length); - } else { - return token; - } - } else { - return token; - } - }); - decl.value = tokens.join(''); - }); - }); - - // Find any :local keyframes - css.walkAtRules(function (atrule) { - if (/keyframes$/.test(atrule.name)) { - var localMatch = /^\s*:local\s*\((.+?)\)\s*$/.exec(atrule.params); - if (localMatch) { - atrule.params = exportScopedName(localMatch[1]); - } - } - }); - - // If we found any :locals, insert an :export rule - var exportedNames = Object.keys(exports); - if (exportedNames.length > 0) { - (function () { - var exportRule = _postcss2['default'].rule({ selector: ':export' }); - exportedNames.forEach(function (exportedName) { - return exportRule.append({ - prop: exportedName, - value: exports[exportedName].join(' '), - raws: { before: '\n ' } - }); - }); - css.append(exportRule); - })(); - } - }; -}); - -processor.generateScopedName = function (exportedName, path) { - var sanitisedPath = path.replace(/\.[^\.\/\\]+$/, '').replace(/[\W_]+/g, '_').replace(/^_|_$/g, ''); - return '_' + sanitisedPath + '__' + exportedName; -}; - -exports['default'] = processor; -module.exports = exports['default'];
\ No newline at end of file diff --git a/node_modules/postcss-modules-scope/package.json b/node_modules/postcss-modules-scope/package.json deleted file mode 100644 index 3f510d0..0000000 --- a/node_modules/postcss-modules-scope/package.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "_from": "postcss-modules-scope@^1.1.0", - "_id": "postcss-modules-scope@1.1.0", - "_inBundle": false, - "_integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", - "_location": "/postcss-modules-scope", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "postcss-modules-scope@^1.1.0", - "name": "postcss-modules-scope", - "escapedName": "postcss-modules-scope", - "rawSpec": "^1.1.0", - "saveSpec": null, - "fetchSpec": "^1.1.0" - }, - "_requiredBy": [ - "/css-loader" - ], - "_resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", - "_shasum": "d6ea64994c79f97b62a72b426fbe6056a194bb90", - "_spec": "postcss-modules-scope@^1.1.0", - "_where": "/home/pruss/Dev/3-minute-website/node_modules/css-loader", - "author": { - "name": "Glen Maddern" - }, - "bugs": { - "url": "https://github.com/css-modules/postcss-modules-scope/issues" - }, - "bundleDependencies": false, - "dependencies": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" - }, - "deprecated": false, - "description": "A CSS Modules transform to extract export statements from local-scope classes", - "devDependencies": { - "babel": "^5.4.7", - "babel-eslint": "^6.1.2", - "babel-istanbul": "^0.4.0", - "babelify": "^7.1.0", - "chokidar-cli": "^1.0.1", - "codecov.io": "^0.1.2", - "coveralls": "^2.11.2", - "css-selector-parser": "^1.0.4", - "eslint": "^1.5.0", - "mocha": "^3.0.1" - }, - "files": [ - "lib" - ], - "homepage": "https://github.com/css-modules/postcss-modules-scope", - "keywords": [ - "css-modules", - "postcss", - "plugin" - ], - "license": "ISC", - "main": "lib/index.js", - "name": "postcss-modules-scope", - "repository": { - "type": "git", - "url": "git+https://github.com/css-modules/postcss-modules-scope.git" - }, - "scripts": { - "autotest": "chokidar src test -c 'npm test'", - "build": "babel --out-dir lib src", - "cover": "babel-istanbul cover node_modules/.bin/_mocha", - "lint": "eslint src", - "posttest": "npm run lint && npm run build", - "precover": "npm run lint && npm run build", - "prepublish": "npm run build", - "test": "mocha --compilers js:babel/register", - "travis": "npm run cover -- --report lcovonly", - "watch": "chokidar src -c 'npm run build'" - }, - "version": "1.1.0" -} |