From 13506cf34fe1bb10050c369409a9d98fc2c15cfa Mon Sep 17 00:00:00 2001 From: ache Date: Mon, 21 Jan 2019 03:47:02 +0100 Subject: New eslintrc rules (exceptions) --- .eslintrc.json | 188 --------------------------------------------------------- dist/index.js | 120 +++++++++++++++++++++++++++++++++++- package.json | 2 +- src/index.js | 19 +++--- 4 files changed, 129 insertions(+), 200 deletions(-) delete mode 100644 .eslintrc.json diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 147e056..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,188 +0,0 @@ -{ - "parserOptions": { - "ecmaVersion": 6, - "sourceType": "module" - }, - - "env": { - "es6": true, - "node": true, - "mocha": true - }, - - "plugins": [], - - "globals": { - "document": false, - "navigator": false, - "window": false, - "expect": true - }, - - "rules": { - "accessor-pairs": 2, - "array-bracket-spacing": [1, "never"], - "arrow-spacing": [2, {"before": true, "after": true}], - "block-spacing": [2, "always"], - "brace-style": [2, "1tbs", {"allowSingleLine": true}], - "camelcase": [2, {"properties": "never"}], - "comma-dangle": [1, "always-multiline"], - "comma-spacing": [2, {"before": false, "after": true}], - "comma-style": [2, "last"], - "computed-property-spacing": [2, "never"], - "constructor-super": 2, - "curly": [2, "multi-line"], - "dot-location": [2, "property"], - "eol-last": [2, "always"], - "eqeqeq": [2, "allow-null"], - "func-call-spacing": [2, "never"], - "callback-return": [1, ["callback", "cb", "done"]], - "handle-callback-err": [2, "^(err|error)$"], - "indent": [2, 2, { - "SwitchCase": 1, - "VariableDeclarator": 1, - "outerIIFEBody": 1, - "FunctionDeclaration": { - "parameters": 1, - "body": 1 - }, - "FunctionExpression": { - "parameters": 1, - "body": 1 - } - }], - "key-spacing": [2, {"beforeColon": false, "afterColon": true}], - "keyword-spacing": [2, {"before": true, "after": true}], - "linebreak-style": [2, "unix"], - "max-len": ["error", { - "code": 100, - "ignoreRegExpLiterals": true, - "ignorePattern": "^\\s*const\\s.+=\\s*require\\s*\\(" - }], - "new-cap": [2, {"newIsCap": true, "capIsNew": false}], - "new-parens": 2, - "newline-per-chained-call": [2, {"ignoreChainWithDepth": 4}], - "no-array-constructor": 2, - "no-caller": 2, - "no-class-assign": 2, - "no-cond-assign": 2, - "no-console": [1, {"allow": ["error"]}], - "no-const-assign": 2, - "no-constant-condition": [2, {"checkLoops": false}], - "no-control-regex": 2, - "no-debugger": 2, - "no-delete-var": 2, - "no-dupe-args": 2, - "no-dupe-class-members": 2, - "no-dupe-keys": 2, - "no-duplicate-case": 2, - "no-duplicate-imports": 2, - "no-empty-character-class": 2, - "no-empty-pattern": 2, - "no-eval": 2, - "no-ex-assign": 2, - "no-extend-native": 2, - "no-extra-bind": 2, - "no-extra-boolean-cast": 2, - "no-extra-parens": [2, "functions"], - "no-fallthrough": 2, - "no-floating-decimal": 2, - "no-func-assign": 2, - "no-global-assign": 2, - "no-implied-eval": 2, - "no-inner-declarations": [2, "functions"], - "no-invalid-regexp": 2, - "no-irregular-whitespace": 2, - "no-iterator": 2, - "no-label-var": 2, - "no-labels": [2, {"allowLoop": false, "allowSwitch": false}], - "no-lone-blocks": 2, - "no-lonely-if": 2, - "no-mixed-operators": [2, { - "groups": [ - ["+", "-", "*", "/", "%", "**"], - ["&", "|", "^", "~", "<<", ">>", ">>>"], - ["==", "!=", "===", "!==", ">", ">=", "<", "<="], - ["&&", "||"], - ["in", "instanceof"] - ], - "allowSamePrecedence": false - }], - "no-mixed-spaces-and-tabs": 2, - "no-multi-spaces": 2, - "no-multi-str": 2, - "no-multiple-empty-lines": [2, {"max": 2}], - "no-native-reassign": 2, - "no-negated-in-lhs": 2, - "no-nested-ternary": 2, - "no-new": 2, - "no-new-func": 2, - "no-new-object": 2, - "no-new-require": 2, - "no-new-symbol": 2, - "no-new-wrappers": 2, - "no-obj-calls": 2, - "no-octal": 2, - "no-octal-escape": 2, - "no-path-concat": 2, - "no-proto": 2, - "no-redeclare": 2, - "no-regex-spaces": 2, - "no-return-assign": [2, "except-parens"], - "no-self-assign": 2, - "no-self-compare": 2, - "no-sequences": 2, - "no-shadow-restricted-names": 2, - "no-sparse-arrays": 2, - "no-tabs": 2, - "no-template-curly-in-string": 2, - "no-this-before-super": 2, - "no-throw-literal": 2, - "no-trailing-spaces": 2, - "no-undef": 2, - "no-undef-init": 2, - "no-unexpected-multiline": 2, - "no-unmodified-loop-condition": 2, - "no-unneeded-ternary": [2, {"defaultAssignment": false}], - "no-unreachable": 2, - "no-unsafe-finally": 2, - "no-unsafe-negation": 2, - "no-unused-vars": [2, {"vars": "all", "args": "none"}], - "no-useless-call": 2, - "no-useless-computed-key": 2, - "no-useless-constructor": 2, - "no-useless-escape": 2, - "no-useless-rename": 2, - "no-var": 2, - "no-whitespace-before-property": 2, - "no-with": 2, - "object-curly-spacing": [1, "never"], - "object-property-newline": [2, {"allowMultiplePropertiesPerLine": true}], - "one-var": [2, {"initialized": "never"}], - "operator-linebreak": [2, "after", {"overrides": {"?": "before", ":": "before"}}], - "padded-blocks": [0, "never"], - "prefer-template": 2, - "prefer-const": [2, {"destructuring": "any", "ignoreReadBeforeAssign": true}], - "quotes": [2, "single", {"avoidEscape": true, "allowTemplateLiterals": true}], - "rest-spread-spacing": [2, "never"], - "space-before-blocks": [2, "always"], - "space-before-function-paren": ["error", { - "anonymous": "always", - "named": "never", - "asyncArrow": "always" - }], - "space-in-parens": [2, "never"], - "space-infix-ops": 2, - "space-unary-ops": [2, {"words": true, "nonwords": false}], - "spaced-comment": [2, "always", - {"line": {"markers": ["*package", "!", ","]}, "block": {"balanced": true, "markers": ["*package", "!", ","], "exceptions": ["*"]}} - ], - "template-curly-spacing": [2, "never"], - "unicode-bom": [2, "never"], - "use-isnan": 2, - "valid-typeof": 2, - "wrap-iife": [2, "any", {"functionPrototypeMethods": true}], - "yield-star-spacing": [2, "both"], - "yoda": [2, "never"] - } -} diff --git a/dist/index.js b/dist/index.js index 9a390c3..843e7fc 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1 +1,119 @@ -"use strict"; \ No newline at end of file +"use strict"; + +var visit = require('unist-util-visit'); +/** + * Given the MDAST ast, look for all fenced Blockquote + * + * @param {object} ast + * @param {vFile} vFile + * @return {function} + */ + + +function visitBlockquote(ast) { + return visit(ast, 'blockquote', function (node, index, parent) { + var firstNode = node.children[0]; + + if (firstNode.type === 'paragraph') { + if (firstNode.children[0].type === 'text') { + var firstChild = firstNode.children[0]; + + if (firstChild.value.startsWith('!secret')) { + node.type = 'div'; + firstChild.value = firstChild.value.substr(7); + var sum = ''; + + if (firstChild.value.indexOf('\n') >= 0) { + sum = firstChild.value.substr(0, firstChild.value.indexOf('\n')).trim(); + firstChild.value = firstChild.value.substr(firstChild.value.indexOf('\n') + 1); + } else { + sum = firstChild.value; + firstChild.value = ''; + } + + var secret = { + type: 'special-box-secret', + children: [node, { + type: 'summary', + data: { + hName: 'summary', + hChildren: [{ + type: 'text', + value: sum || 'Spoiler' + }] + } + }], + data: { + hName: 'details', + hProperties: { + className: 'special-box secret' + } + } + }; + parent.children.splice(index, 1, secret); + } else if (firstChild.value.startsWith('!information\n') || firstChild.value.startsWith('!good\n') || firstChild.value.startsWith('!bad\n') || firstChild.value.startsWith('!comment\n') || firstChild.value.startsWith('!attention\n') || firstChild.value.startsWith('!question')) { + node.type = 'div'; + node.data = { + hName: 'div', + hProperties: { + className: 'special-box-content' + } + }; + var type = ''; + + if (firstChild.value.indexOf('\n') > 0) { + type = firstChild.value.substr(1, firstChild.value.indexOf('\n')); + firstChild.value = firstChild.value.substr(firstChild.value.indexOf('\n') + 1); + } else { + type = firstChild.value.substr(1); + firstChild.value = ''; + } + + var _box = { + type: 'special-box-div', + children: [node], + data: { + hName: 'div', + hProperties: { + className: "special-box ".concat(type) + } + } + }; + parent.children.splice(index, 1, _box); + } + } + } + + return node; + }); +} +/** + * Returns the transformer which acst on the MDAST tree and given VFile. + * + * @link https://github.com/unifiedjs/unified#function-transformernode-file-next + * @link https://github.com/syntax-tree/mdast + * @link https://github.com/vfile/vfile + * @return {function} + */ + + +function box() { + /** + * @param {object} ast MDAST + * @param {vFile} vFile + * @param {function} next + * @return {object} + */ + return function (ast, vFile, next) { + // Transformer + visitBlockquote(ast); + + if (typeof next === 'function') { + return next(null, ast, vFile); + } + + return ast; + }; +} + +module.exports = box; \ No newline at end of file diff --git a/package.json b/package.json index 0dd6b49..7668f73 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "A remark plugin for markdown that parse special blox", "main": "dist/index.js", "scripts": { - "pretest": "xo", + "pretest": "xo && npm run-script prepare", "prepare": "del-cli dist && cross-env BABEL_ENV=production babel src --out-dir dist", "test": "ava" }, diff --git a/src/index.js b/src/index.js index 6f8b5d5..0634441 100644 --- a/src/index.js +++ b/src/index.js @@ -13,10 +13,12 @@ function visitBlockquote(ast) { if (firstNode.type === 'paragraph') { if (firstNode.children[0].type === 'text') { + const firstChild = firstNode.children[0]; if (firstChild.value.startsWith('!secret')) { node.type = 'div'; firstChild.value = firstChild.value.substr(7); + let sum = ''; if (firstChild.value.indexOf('\n') >= 0) { sum = firstChild.value.substr(0, @@ -52,13 +54,11 @@ function visitBlockquote(ast) { }; parent.children.splice(index, 1, secret); - - return node; - } else if (firstChild.value.startsWith('!information') || - firstChild.value.startsWith('!good') || - firstChild.value.startsWith('!bad') || - firstChild.value.startsWith('!comment') || - firstChild.value.startsWith('!attention') || + } else if (firstChild.value.startsWith('!information\n') || + firstChild.value.startsWith('!good\n') || + firstChild.value.startsWith('!bad\n') || + firstChild.value.startsWith('!comment\n') || + firstChild.value.startsWith('!attention\n') || firstChild.value.startsWith('!question')) { node.type = 'div'; node.data = { @@ -67,10 +67,11 @@ function visitBlockquote(ast) { className: 'special-box-content', }, }; + let type = ''; if (firstChild.value.indexOf('\n') > 0) { type = firstChild.value.substr(1, firstChild.value.indexOf('\n')); - firstChild.value = firstChild.value.substr(firstChild.value.indexOf('\n')); + firstChild.value = firstChild.value.substr(firstChild.value.indexOf('\n') + 1); } else { type = firstChild.value.substr(1); firstChild.value = ''; @@ -88,8 +89,6 @@ function visitBlockquote(ast) { }; parent.children.splice(index, 1, box); - - return node; } } } -- cgit v1.2.3