diff --git a/.circleci/config.yml b/.circleci/config.yml index 8a756b3de..274ec25ac 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -67,6 +67,9 @@ jobs: - run: name: Test - Definition Lists command: npm run test:definition-lists + - run: + name: Test - Hard Breaks + command: npm run test:hard-breaks - run: name: Test - Variables command: npm run test:variables diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 74e7bb660..000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,79 +0,0 @@ -module.exports = { - root : true, - parserOptions : { - ecmaVersion : 2021, - sourceType : 'module', - ecmaFeatures : { - jsx : true - } - }, - env : { - browser : true, - node : true - }, - plugins : ['react', 'jest'], - rules : { - /** Errors **/ - 'camelcase' : ['error', { properties: 'never' }], - //'func-style' : ['error', 'expression', { allowArrowFunctions: true }], - 'no-array-constructor' : 'error', - 'no-iterator' : 'error', - 'no-nested-ternary' : 'error', - 'no-new-object' : 'error', - 'no-proto' : 'error', - 'react/jsx-no-bind' : ['error', { allowArrowFunctions: true }], - 'react/jsx-uses-react' : 'error', - 'react/prefer-es6-class' : ['error', 'never'], - 'jest/valid-expect' : ['error', { maxArgs: 3 }], - - /** Warnings **/ - 'max-lines' : ['warn', { - max : 200, - skipComments : true, - skipBlankLines : true, - }], - 'max-depth' : ['warn', { max: 4 }], - 'max-params' : ['warn', { max: 5 }], - 'no-restricted-syntax' : ['warn', 'ClassDeclaration', 'SwitchStatement'], - 'no-unused-vars' : ['warn', { - vars : 'all', - args : 'none', - varsIgnorePattern : 'config|_|cx|createClass' - }], - 'react/jsx-uses-vars' : 'warn', - - /** Fixable **/ - 'arrow-parens' : ['warn', 'always'], - 'brace-style' : ['warn', '1tbs', { allowSingleLine: true }], - 'jsx-quotes' : ['warn', 'prefer-single'], - 'no-var' : 'warn', - 'prefer-const' : 'warn', - 'prefer-template' : 'warn', - 'quotes' : ['warn', 'single', { 'allowTemplateLiterals': true }], - 'semi' : ['warn', 'always'], - - /** Whitespace **/ - 'array-bracket-spacing' : ['warn', 'never'], - 'arrow-spacing' : ['warn', { before: false, after: false }], - 'comma-spacing' : ['warn', { before: false, after: true }], - 'indent' : ['warn', 'tab', { 'MemberExpression': 'off' }], - 'keyword-spacing' : ['warn', { - before : true, - after : true, - overrides : { - if : { 'before': false, 'after': false } - } - }], - 'key-spacing' : ['warn', { - multiLine : { beforeColon: true, afterColon: true, align: 'colon' }, - singleLine : { beforeColon: false, afterColon: true } - }], - 'linebreak-style' : 'off', - 'no-trailing-spaces' : 'warn', - 'no-whitespace-before-property' : 'warn', - 'object-curly-spacing' : ['warn', 'always'], - 'react/jsx-indent-props' : ['warn', 'tab'], - 'space-in-parens' : ['warn', 'never'], - 'template-curly-spacing' : ['warn', 'never'], - } -}; diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index 338bcdc4e..c6f415a87 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -61,12 +61,11 @@ const BrewRenderer = (props)=>{ }; const [state, setState] = useState({ - viewablePageNumber : 0, - height : PAGE_HEIGHT, - isMounted : false, - visibility : 'hidden', - zoom : 100, - currentPageNumber : 1, + height : PAGE_HEIGHT, + isMounted : false, + visibility : 'hidden', + zoom : 100, + currentPageNumber : 1, }); const mainRef = useRef(null); @@ -90,16 +89,6 @@ const BrewRenderer = (props)=>{ })); }; - const handleScroll = (e)=>{ - const target = e.target; - setState((prevState)=>({ - ...prevState, - viewablePageNumber : Math.floor(target.scrollTop / target.scrollHeight * rawPages.length) - })); - - getCurrentPage(e); - }; - const getCurrentPage = (e) => { const target = e.target; const { scrollTop, clientHeight, scrollHeight } = target; @@ -109,7 +98,7 @@ const BrewRenderer = (props)=>{ setState((prevState) => ({ ...prevState, - currentPageNumber: currentPageNumber || 1 + currentPageNumber : currentPageNumber || 1 })); }; @@ -120,23 +109,12 @@ const BrewRenderer = (props)=>{ if(index == props.currentEditorPage) //Already rendered before this step return false; - if(Math.abs(index - state.viewablePageNumber) <= 3) + if(Math.abs(index - state.currentPageNumber) <= 3) return true; return false; }; - const renderPageInfo = ()=>{ - return
Term 1
\n`); + }); + + test('Multiline Definition List must have at least one non-newline character after ::', function() { + const source = 'Term 1\n::\nDefinition 1\n\n'; + const rendered = Markdown.render(source).trim(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`Term 1
\n\nDefinition 1
`); + }); }); diff --git a/tests/markdown/hard-breaks.test.js b/tests/markdown/hard-breaks.test.js new file mode 100644 index 000000000..3d0f59a41 --- /dev/null +++ b/tests/markdown/hard-breaks.test.js @@ -0,0 +1,47 @@ +/* eslint-disable max-lines */ + +const Markdown = require('naturalcrit/markdown.js'); + +describe('Hard Breaks', ()=>{ + test('Single Break', function() { + const source = ':\n\n'; + const rendered = Markdown.render(source).trim(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(``); + }); + + test('Double Break', function() { + const source = '::\n\n'; + const rendered = Markdown.render(source).trim(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(``); + }); + + test('Triple Break', function() { + const source = ':::\n\n'; + const rendered = Markdown.render(source).trim(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(``); + }); + + test('Many Break', function() { + const source = '::::::::::\n\n'; + const rendered = Markdown.render(source).trim(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(``); + }); + + test('Multiple sets of Breaks', function() { + const source = ':::\n:::\n:::'; + const rendered = Markdown.render(source).trim(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`\n\n`); + }); + + test('Break directly between two paragraphs', function() { + const source = 'Line 1\n::\nLine 2'; + const rendered = Markdown.render(source).trim(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`Line 1
\n\nLine 2
`); + }); + + test('Ignored inside a code block', function() { + const source = '```\n\n:\n\n```\n'; + const rendered = Markdown.render(source).trim(); + expect(rendered, `Input:\n${source}`, { showPrefix: false }).toBe(`\n:\n`);
+ });
+});
diff --git a/themes/V3/Blank/style.less b/themes/V3/Blank/style.less
index 0f779c38b..18a478cf9 100644
--- a/themes/V3/Blank/style.less
+++ b/themes/V3/Blank/style.less
@@ -236,7 +236,7 @@ body { counter-reset : page-numbers; }
left : 50%;
width : 50%;
height : 50%;
- transform : translateX(-50%) translateY(50%) rotate(calc(-1deg * var(--rotation))) scaleX(calc(1 / var(--scaleX))) scaleY(calc(1 / var(--scaleY)));
+ transform : translateX(-50%) translateY(50%) scaleX(calc(1 / var(--scaleX))) scaleY(calc(1 / var(--scaleY))) rotate(calc(-1deg * var(--rotation)));
}
& img {
position : absolute;