draft-regex
Advanced tools
Comparing version 1.1.4 to 1.1.5
@@ -27,2 +27,3 @@ 'use strict'; | ||
} | ||
if (replaceHeader && block.type.slice(0, 6) === 'header') { | ||
@@ -35,2 +36,5 @@ return (0, _replaceTextRegex.createContentBlock)(block, { type: shiftHeader }); | ||
} | ||
if (!blockTypes) return (0, _replaceTextRegex.createContentBlock)(block, { type: 'unstyled' }); | ||
return block; | ||
@@ -40,5 +44,5 @@ }); | ||
var newEditorState = _draftJs.EditorState.createWithContent(newCS); | ||
var ES = _draftJs.EditorState.forceSelection(newEditorState, SS); | ||
var ES = _draftJs.EditorState.acceptSelection(newEditorState, SS); | ||
return ES; | ||
} |
@@ -11,12 +11,10 @@ 'use strict'; | ||
var _rules = require('./rules'); | ||
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } | ||
var optionRules = { | ||
extraSpaces: [{ reg: new RegExp(/\s+/g), shift: ' ' }, // "Extra spaces" | ||
{ reg: new RegExp(/(^\s*)|(\s*)$/g), shift: '' }], | ||
spacesAfterPunctuationMarks: [{ reg: new RegExp(/(,|\.)(\S)/g), shift: '$1 $2' }] | ||
}; | ||
var typoRules = [{ reg: new RegExp(/"([^"]+)"/g), shift: '«$1»' }, // меняет кавычки на елочки | ||
{ reg: new RegExp(/\s+/g), shift: ' ' }, // удаляет лишние пробелы | ||
{ reg: new RegExp(/\[^!?:;,.…] +[A-ZА-Я]/g), shift: '$1 $2' }]; | ||
var optionRules = {}; | ||
function createSelectionState(key) { | ||
@@ -49,2 +47,49 @@ var start = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; | ||
function replaceText(text, rule) { | ||
var _ref2 = rule || {}, | ||
reg = _ref2.reg, | ||
shift = _ref2.shift; | ||
return text.replace(reg, shift); | ||
} | ||
function getRecordBlock(rules, currentContentBlock) { | ||
var text = currentContentBlock.getText().slice(); | ||
for (var i = 0; i < rules.length; i += 1) { | ||
text = replaceText(text, rules[i]); | ||
} | ||
return createContentBlock(currentContentBlock, { | ||
text: text, | ||
key: currentContentBlock.getKey() | ||
}); | ||
} | ||
function applyMatchedRules(rules, editorState) { | ||
var contentState = editorState.getCurrentContent(); | ||
var anchorKey = editorState.getSelection().getAnchorKey(); | ||
var newBlockMap = contentState.getBlockMap().map(function (block) { | ||
return getRecordBlock(rules, block); | ||
}); | ||
var currentBlock = contentState.getBlockForKey(anchorKey); | ||
var newCurrentBlock = newBlockMap.get(anchorKey); | ||
var anchorOffset = editorState.getSelection().getAnchorOffset(); | ||
var diffInLengths = currentBlock.getLength() || 0; | ||
if (newCurrentBlock) { | ||
diffInLengths = currentBlock.getLength() - newCurrentBlock.getLength(); | ||
} | ||
var newSelectionState = createSelectionState(anchorKey, anchorOffset - diffInLengths); | ||
var newContentState = new _draftJs.ContentState({ blockMap: newBlockMap }); | ||
var newEditorState = _draftJs.EditorState.createWithContent(newContentState); | ||
var forcedEditorState = _draftJs.EditorState.forceSelection(newEditorState, newSelectionState); | ||
if (forcedEditorState.getCurrentContent().getPlainText() !== contentState.getPlainText()) { | ||
return forcedEditorState; | ||
} | ||
return editorState; | ||
} | ||
function prepareOptionableRules(options) { | ||
@@ -60,10 +105,3 @@ var acc = []; | ||
function replaceTextRegex(editorState) { | ||
var rulesArray = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _rules.typoRules; | ||
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : { extraSpaces: true }; | ||
var CS = editorState.getCurrentContent(); | ||
var CSMap = CS.getBlockMap(); | ||
var CSText = CS.getPlainText(); | ||
function replaceTextRegex(editorState, options) { | ||
var optionableRules = []; | ||
@@ -74,40 +112,5 @@ if (options) { | ||
} | ||
var rules = options ? rulesArray.concat(optionableRules) : rulesArray; | ||
var rules = options ? typoRules.concat(optionableRules) : typoRules; | ||
var rule = void 0; | ||
var match = rules.some(function (typoRule) { | ||
rule = typoRule; | ||
return typoRule && typoRule.reg.exec(CSText); | ||
}); | ||
if (match) { | ||
var _ref2 = rule || {}, | ||
_reg = _ref2.reg, | ||
_shift = _ref2.shift; | ||
var SS = editorState.getSelection(); | ||
var _key = SS.getAnchorKey(); | ||
var anchorOffset = SS.getAnchorOffset(); | ||
var currentContentBlock = CS.getBlockForKey(_key); | ||
var text = currentContentBlock.getText().replace(_reg, _shift); | ||
var newBlock = createContentBlock(currentContentBlock, { | ||
text: text, | ||
key: _key | ||
}); | ||
var diffInLengths = currentContentBlock.getLength() - newBlock.getLength(); | ||
var newSS = createSelectionState(_key, anchorOffset - diffInLengths); | ||
var newBlockMap = CSMap.set(_key, newBlock); | ||
var newCS = new _draftJs.ContentState({ blockMap: newBlockMap }); | ||
var ES = _draftJs.EditorState.createWithContent(newCS); | ||
var forceES = _draftJs.EditorState.forceSelection(ES, newSS); | ||
var forceESText = forceES.getCurrentContent().getPlainText(); | ||
if (forceESText !== CSText) { | ||
return forceES; | ||
} | ||
return editorState; | ||
} | ||
return editorState; | ||
return applyMatchedRules(rules, editorState); | ||
} |
147
index.js
'use strict'; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
Object.defineProperty(exports, '__esModule', { | ||
value: true, | ||
}); | ||
@@ -41,3 +41,9 @@ exports.default = clearEmptyBlocks; | ||
// 3. Check hole between two non-empty lines | ||
if (emptyBefore > maxEmptyLines || emptyAfter > maxEmptyLines || emptyBefore + emptyAfter >= maxEmptyLines && currentBlock.getText() === '' && currentBlock !== CS.getLastBlock()) { | ||
if ( | ||
emptyBefore > maxEmptyLines || | ||
emptyAfter > maxEmptyLines || | ||
(emptyBefore + emptyAfter >= maxEmptyLines && | ||
currentBlock.getText() === '' && | ||
currentBlock !== CS.getLastBlock()) | ||
) { | ||
var keyForRemove = void 0; | ||
@@ -64,6 +70,6 @@ var keyForFocus = void 0; | ||
} | ||
'use strict'; | ||
('use strict'); | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
Object.defineProperty(exports, '__esModule', { | ||
value: true, | ||
}); | ||
@@ -81,9 +87,9 @@ exports.default = clearPastedStyle; | ||
var _ref = options || {}, | ||
blockTypes = _ref.blockTypes, | ||
replaceHeader = _ref.replaceHeader, | ||
shiftHeader = _ref.shiftHeader, | ||
replaceList = _ref.replaceList, | ||
shiftList = _ref.shiftList; | ||
blockTypes = _ref.blockTypes, | ||
replaceHeader = _ref.replaceHeader, | ||
shiftHeader = _ref.shiftHeader, | ||
replaceList = _ref.replaceList, | ||
shiftList = _ref.shiftList; | ||
var blockMap = CS.getBlockMap().map(function (block) { | ||
var blockMap = CS.getBlockMap().map(function(block) { | ||
if (blockTypes && blockTypes.indexOf(block.type) === -1) { | ||
@@ -111,6 +117,6 @@ return (0, _replaceTextRegex.createContentBlock)(block, { type: 'unstyled' }); | ||
} | ||
'use strict'; | ||
('use strict'); | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
Object.defineProperty(exports, '__esModule', { | ||
value: true, | ||
}); | ||
@@ -131,3 +137,5 @@ exports.clearPastedStyle = exports.replaceTextRegex = exports.clearEmptyBlocks = undefined; | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function _interopRequireDefault(obj) { | ||
return obj && obj.__esModule ? obj : { default: obj }; | ||
} | ||
@@ -137,6 +145,6 @@ exports.clearEmptyBlocks = _clearEmptyBlocks2.default; | ||
exports.clearPastedStyle = _clearPastedStyle2.default; | ||
'use strict'; | ||
('use strict'); | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
Object.defineProperty(exports, '__esModule', { | ||
value: true, | ||
}); | ||
@@ -152,10 +160,23 @@ exports.createContentBlock = createContentBlock; | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function _interopRequireDefault(obj) { | ||
return obj && obj.__esModule ? obj : { default: obj }; | ||
} | ||
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } | ||
function _toConsumableArray(arr) { | ||
if (Array.isArray(arr)) { | ||
for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { | ||
arr2[i] = arr[i]; | ||
} | ||
return arr2; | ||
} else { | ||
return Array.from(arr); | ||
} | ||
} | ||
var optionRules = { | ||
extraSpaces: [{ reg: new RegExp(/\s+/g), shift: ' ' }, // "Extra spaces" | ||
{ reg: new RegExp(/(^\s*)|(\s*)$/g), shift: '' }], | ||
spacesAfterPunctuationMarks: [{ reg: new RegExp(/(,|\.)(\S)/g), shift: '$1 $2' }] | ||
extraSpaces: [ | ||
{ reg: new RegExp(/\s+/g), shift: ' ' }, // "Extra spaces" | ||
{ reg: new RegExp(/(^\s*)|(\s*)$/g), shift: '' }, | ||
], | ||
spacesAfterPunctuationMarks: [{ reg: new RegExp(/(,|\.)(\S)/g), shift: '$1 $2' }], | ||
}; | ||
@@ -171,3 +192,3 @@ | ||
focusKey: key, | ||
focusOffset: end || start | ||
focusOffset: end || start, | ||
}); | ||
@@ -178,6 +199,6 @@ } | ||
var _ref = options || {}, | ||
text = _ref.text, | ||
key = _ref.key, | ||
type = _ref.type, | ||
characterList = _ref.characterList; | ||
text = _ref.text, | ||
key = _ref.key, | ||
type = _ref.type, | ||
characterList = _ref.characterList; | ||
@@ -188,3 +209,3 @@ return new _draftJs.ContentBlock({ | ||
type: type || block.getType(), | ||
characterList: characterList || block.getCharacterList() | ||
characterList: characterList || block.getCharacterList(), | ||
}); | ||
@@ -195,3 +216,3 @@ } | ||
var acc = []; | ||
Object.keys(options).forEach(function (key) { | ||
Object.keys(options).forEach(function(key) { | ||
acc.push.apply(acc, _toConsumableArray(optionRules[key])); | ||
@@ -205,4 +226,6 @@ return acc; | ||
function replaceTextRegex(editorState) { | ||
var rulesArray = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _rules2.default; | ||
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : { extraSpaces: true }; | ||
var rulesArray = | ||
arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _rules2.default; | ||
var options = | ||
arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : { extraSpaces: true }; | ||
@@ -221,3 +244,3 @@ var CS = editorState.getCurrentContent(); | ||
var rule = void 0; | ||
var match = rules.some(function (typoRule) { | ||
var match = rules.some(function(typoRule) { | ||
rule = typoRule; | ||
@@ -229,4 +252,4 @@ return typoRule && typoRule.reg.exec(CSText); | ||
var _ref2 = rule || {}, | ||
_reg = _ref2.reg, | ||
_shift = _ref2.shift; | ||
_reg = _ref2.reg, | ||
_shift = _ref2.shift; | ||
@@ -240,3 +263,3 @@ var SS = editorState.getSelection(); | ||
text: text, | ||
key: _key | ||
key: _key, | ||
}); | ||
@@ -260,25 +283,39 @@ | ||
} | ||
'use strict'; | ||
('use strict'); | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
Object.defineProperty(exports, '__esModule', { | ||
value: true, | ||
}); | ||
var typoRules = [ | ||
{ reg: new RegExp(/"([^"]+)"/g), shift: '«$1»' }, | ||
{ reg: new RegExp(/(\() +/g), shift: '(' }, // "Удаление лишних пробелов | ||
{ reg: new RegExp(/ +\)/g), shift: ')' }, // после открывающей и перед закрывающей скобкой" | ||
{ reg: new RegExp(/(\d)( |\u00A0)(%|‰|‱)/g), shift: '$1$3' }, // "Удаление пробела перед %, ‰ и ‱" | ||
{ reg: new RegExp(/\(r\)/gi), shift: '®' }, | ||
{ reg: new RegExp(/(copyright )?\((c|с)\)/gi), shift: '©' }, | ||
{ reg: new RegExp(/\(tm\)/gi), shift: '™' }, // "(c) → ©, (tm) → ™, (r) → ®" | ||
{ reg: new RegExp(/<[^>]+>/g), shift: '' }, // "Удаление HTML-тегов" | ||
{ reg: new RegExp(/(^|\D)1\/2(\D|$)/g), shift: '$1½$2' }, | ||
{ reg: new RegExp(/(^|\D)1\/4(\D|$)/g), shift: '$1¼$2' }, | ||
{ reg: new RegExp(/(^|\D)3\/4(\D|$)/g), shift: '$1¾$2' }, // "1/2 → ½, 1/4 → ¼, 3/4 → ¾" | ||
{ reg: new RegExp(/!=/g), shift: '≠' }, | ||
{ reg: new RegExp(/<=/g), shift: '≤' }, | ||
{ reg: new RegExp(/(^|[^=])>=/g), shift: '$1≥' }, | ||
{ reg: new RegExp(/<</g), shift: '≪' }, | ||
{ reg: new RegExp(/>>/g), shift: '≫' }, | ||
{ reg: new RegExp(/~=/g), shift: '≅' }, | ||
{ reg: new RegExp(/(^|[^+])\+-/g), shift: '$1±' }, | ||
{ reg: new RegExp(/([!?]) (?=[!?])/g), shift: '$1' }, | ||
// { reg: new RegExp(/(^|[^!?:;,.…]) ([!?:;,.])(?!\))/g), shift: '$1$2' }, | ||
// { reg: new RegExp(/\n[ \t]+/g), shift: '\n' }, | ||
{ reg: new RegExp(/(^|[^.])(\.\.\.|…),/g), shift: '$1…' }, | ||
{ reg: new RegExp(/(!|\?)(\.\.\.|…)(?=[^.]|$)/g), shift: '$1..' }, // "«?…» → «?..», «!…» → «!..», «…,» → «…»" | ||
{ reg: new RegExp(/([а-яё])(\.\.\.|…)([А-ЯЁ])/g), shift: '$1$2 $3' }, | ||
// { reg: new RegExp(/([?!]\.\.)([а-яёa-z])/gi), shift: '$1 $2' }, // "Пробел после «...», «!..» и «?..»" | ||
{ reg: new RegExp(/[«'"„“]([^"'“]*(?:«»[^'"“]*)*)['"»“„]/g), shift: '«$1»' }, | ||
]; | ||
var typoRules = [{ reg: new RegExp(/"([^"]+)"/g), shift: '«$1»' }, { reg: new RegExp(/(\() +/g), shift: '(' }, // "Удаление лишних пробелов | ||
{ reg: new RegExp(/ +\)/g), shift: ')' }, // после открывающей и перед закрывающей скобкой" | ||
{ reg: new RegExp(/(\d)( |\u00A0)(%|‰|‱)/g), shift: '$1$3' }, // "Удаление пробела перед %, ‰ и ‱" | ||
{ reg: new RegExp(/\(r\)/gi), shift: '®' }, { reg: new RegExp(/(copyright )?\((c|с)\)/gi), shift: '©' }, { reg: new RegExp(/\(tm\)/gi), shift: '™' }, // "(c) → ©, (tm) → ™, (r) → ®" | ||
{ reg: new RegExp(/<[^>]+>/g), shift: '' }, // "Удаление HTML-тегов" | ||
{ reg: new RegExp(/(^|\D)1\/2(\D|$)/g), shift: '$1½$2' }, { reg: new RegExp(/(^|\D)1\/4(\D|$)/g), shift: '$1¼$2' }, { reg: new RegExp(/(^|\D)3\/4(\D|$)/g), shift: '$1¾$2' }, // "1/2 → ½, 1/4 → ¼, 3/4 → ¾" | ||
{ reg: new RegExp(/!=/g), shift: '≠' }, { reg: new RegExp(/<=/g), shift: '≤' }, { reg: new RegExp(/(^|[^=])>=/g), shift: '$1≥' }, { reg: new RegExp(/<</g), shift: '≪' }, { reg: new RegExp(/>>/g), shift: '≫' }, { reg: new RegExp(/~=/g), shift: '≅' }, { reg: new RegExp(/(^|[^+])\+-/g), shift: '$1±' }, { reg: new RegExp(/([!?]) (?=[!?])/g), shift: '$1' }, | ||
// { reg: new RegExp(/(^|[^!?:;,.…]) ([!?:;,.])(?!\))/g), shift: '$1$2' }, | ||
// { reg: new RegExp(/\n[ \t]+/g), shift: '\n' }, | ||
{ reg: new RegExp(/(^|[^.])(\.\.\.|…),/g), shift: '$1…' }, { reg: new RegExp(/(!|\?)(\.\.\.|…)(?=[^.]|$)/g), shift: '$1..' }, // "«?…» → «?..», «!…» → «!..», «…,» → «…»" | ||
{ reg: new RegExp(/([а-яё])(\.\.\.|…)([А-ЯЁ])/g), shift: '$1$2 $3' }, | ||
// { reg: new RegExp(/([?!]\.\.)([а-яёa-z])/gi), shift: '$1 $2' }, // "Пробел после «...», «!..» и «?..»" | ||
{ reg: new RegExp(/[«'"„“]([^"'“]*(?:«»[^'"“]*)*)['"»“„]/g), shift: '«$1»' }]; | ||
exports.default = typoRules; | ||
//# sourceMappingURL=index.js.map | ||
//# sourceMappingURL=index.js.map |
{ | ||
"name": "draft-regex", | ||
"version": "1.1.4", | ||
"version": "1.1.5", | ||
"description": "Plugin for checking text with regular expressions", | ||
@@ -8,3 +8,3 @@ "main": "index.js", | ||
"start": "parcel app/index.html", | ||
"build": "babel src -o index.js --source-maps", | ||
"build": "babel src -d build", | ||
"prepublish": "npm run build", | ||
@@ -11,0 +11,0 @@ "lint": "./node_modules/.bin/eslint src/" |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
AI-detected potential malware
Supply chain riskAI has identified this package as malware. This is a strong signal that the package may be malicious.
Found 1 instance in 1 package
480
0
208212