From 2ad7082c0dcc8d0e706046a4c67bf48af6bdefd4 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Mon, 28 Sep 2020 20:38:50 -0700 Subject: [PATCH 01/36] nope --- package-lock.json | 5 --- package.json | 1 - src/lib/ExpensiMark.js | 66 --------------------------------------- src/lib/actions/Report.js | 2 +- 4 files changed, 1 insertion(+), 73 deletions(-) delete mode 100644 src/lib/ExpensiMark.js diff --git a/package-lock.json b/package-lock.json index fff7b6b1f0f1c..8d59d3021e71e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10696,11 +10696,6 @@ "resolved": "https://registry.npmjs.org/jetifier/-/jetifier-1.6.6.tgz", "integrity": "sha512-JNAkmPeB/GS2tCRqUzRPsTOHpGDah7xP18vGJfIjZC+W2sxEHbxgJxetIjIqhjQ3yYbYNEELkM/spKLtwoOSUQ==" }, - "jquery": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz", - "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg==" - }, "js-beautify": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.11.0.tgz", diff --git a/package.json b/package.json index 6a16842f26035..bbb6f982d0a32 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,6 @@ "electron-updater": "^4.3.4", "file-loader": "^6.0.0", "html-entities": "^1.3.1", - "jquery": "^3.5.1", "lodash.get": "^4.4.2", "lodash.has": "^4.5.2", "lodash.orderby": "^4.6.0", diff --git a/src/lib/ExpensiMark.js b/src/lib/ExpensiMark.js deleted file mode 100644 index 4ddf63a1fdeb3..0000000000000 --- a/src/lib/ExpensiMark.js +++ /dev/null @@ -1,66 +0,0 @@ -import Str from './Str'; - -export default class ExpensiMark { - constructor() { - /** - * The list of regex replacements to do on a comment. Check the link regex is first so links are processed - * before other delimiters - * - * @type {Object[]} - */ - this.rules = [ - { - name: 'link', - regex: - '([_*~]*?)(((?:https?):\\/\\/|www\\.)[^\\s<>*~_"\'´.-][^\\s<>"\'´]*?\\.[a-z\\d]+[^\\s<>*~"\']*)\\1', - replacement: '$1$2$1', - }, - { - /** - * Use \b in this case because it will match on words, letters, and _: - * https://www.rexegg.com/regex-boundaries.html#wordboundary - * The !_blank is to prevent the `target="_blank">` section of the link replacement from being captured - * Additionally, something like `\b\_([^<>]*?)\_\b` doesn't work because it won't replace - * `_https://www.test.com_` - */ - name: 'italic', - regex: '(?!_blank">)\\b\\_(.*?)\\_\\b', - replacement: '$1', - }, - { - // Use \B in this case because \b doesn't match * or ~. \B will match everything that \b doesn't, so it - // works for * and ~: https://www.rexegg.com/regex-boundaries.html#notb - name: 'bold', - regex: '\\B\\*(.*?)\\*\\B', - replacement: '$1', - }, - { - name: 'strikethrough', - regex: '\\B\\~(.*?)\\~\\B', - replacement: '$1', - }, - { - name: 'newline', - regex: '\\n', - replacement: '
', - }, - ]; - } - - /** - * Replaces markdown with html elements - * - * @param {String} text - * @returns {String} - */ - replace(text) { - // This ensures that any html the user puts into the comment field shows as raw html - let safeText = Str.safeEscape(text); - - this.rules.forEach((rule) => { - safeText = safeText.replace(new RegExp(rule.regex, 'g'), rule.replacement); - }); - - return safeText; - } -} diff --git a/src/lib/actions/Report.js b/src/lib/actions/Report.js index 9184dcec9e123..61e4a07fc856d 100644 --- a/src/lib/actions/Report.js +++ b/src/lib/actions/Report.js @@ -1,13 +1,13 @@ import moment from 'moment'; import _ from 'underscore'; import lodashGet from 'lodash.get'; +import ExpensiMark from '../ExpensiMark'; import Ion from '../Ion'; import {queueRequest, onReconnect} from '../API'; import IONKEYS from '../../IONKEYS'; import CONFIG from '../../CONFIG'; import * as Pusher from '../Pusher/pusher'; import promiseAllSettled from '../promiseAllSettled'; -import ExpensiMark from '../ExpensiMark'; import Notification from '../Notification'; import * as PersonalDetails from './PersonalDetails'; import {redirect} from './App'; From f7d32c82c8f0c9e1719d23d1a644c51c1a46f4c2 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Mon, 28 Sep 2020 20:39:12 -0700 Subject: [PATCH 02/36] add new expensimark --- src/lib/ExpensiMark.js | 97 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 src/lib/ExpensiMark.js diff --git a/src/lib/ExpensiMark.js b/src/lib/ExpensiMark.js new file mode 100644 index 0000000000000..c134363cf4554 --- /dev/null +++ b/src/lib/ExpensiMark.js @@ -0,0 +1,97 @@ +import Str from './Str'; + +export default class ExpensiMark { + constructor() { + /** + * The list of regex replacements to do on a comment. Check the link regex is first so links are processed + * before other delimiters + * + * @type {Object[]} + */ + this.rules = [ + /** + * Apply the code-fence first so that we avoid replacing anything inside of it that we're not supposed to + * (aka any rule with the '(?![^<]*<\/pre>)' avoidance in it + */ + { + name: 'codeFence', + + // < is a backtick symbol we are matching on three of them before then after a new line character + regex: /```\n((?:(?!```)[\s\S])+)\n```/g, + replacement: (match, firstCapturedGroup) => { + + // We're using a function here to perform an additional replace on the content inside the backticks because + // Android is not able to use
 tags and does not respect whitespace characters at all like HTML does.
+                    // We do not want to mess with the new lines here since they need to be converted into 
. And we + // don't want to do this anywhere else since that would break HTML. + return `
${firstCapturedGroup.replace(/(?:(?![\n\r])\s)/g, ' ')}
`; + }, + }, + /** + * Converts markdown style links to anchor tags e.g. [Expensify](https://www.expensify.com) + * We need to convert before the autolink rule since it will not try to create a link from an existing anchor tag. + */ + { + name: 'link', + regex: /\[([\w\s\d\-\?\!,.;:/#_~%{}]+)\]\(((?:\/|https?:\/\/)[\w\d./?=#%{},.;:~_\-]+)\)/, + replacement: '$1', + }, + { + name: 'autolink', + regex: /(?![^<]*>|[^<>]*<\/)([_*~]*?)(((?:https?):\/\/|www\.)[^\s<>*~_"\'´.-][^\s<>"\'´]*?\.[a-z\d]+[^\s<>*~"\'\)]*)\1/, + replacement: '$1$2$1', + }, + { + /** + * Use \b in this case because it will match on words, letters, and _: https://www.rexegg.com/regex-boundaries.html#wordboundary + * The !_blank is to prevent the `target="_blank">` section of the link replacement from being captured + * Additionally, something like `\b\_([^<>]*?)\_\b` doesn't work because it won't replace `_https://www.test.com_` + */ + name: 'italic', + regex: /(?!_blank">)\b\_(.*?)\_\b(?![^<]*<\/pre>)/g, + replacement: '$1' + }, + { + // Use \B in this case because \b doesn't match * or ~. \B will match everything that \b doesn't, so it works for * and ~: https://www.rexegg.com/regex-boundaries.html#notb + name: 'bold', + regex: /\B\*(.*?)\*\B(?![^<]*<\/pre>)/g, + replacement: '$1' + }, + { + name: 'strikethrough', + regex: /\B\~(.*?)\~\B(?![^<]*<\/pre>)/g, + replacement: '$1' + }, + { + name: 'inlineCodeBlock', + + // Use the url escaped version of a backtick (`) symbol + regex: /\B`(.*?)`\B(?![^<]*<\/pre>)/g, + replacement: '$1', + }, + { + name: 'newline', + regex: /\n/g, + replacement: '
', + }, + ]; + } + + /** + * Replaces markdown with html elements + * + * @param {String} text + * + * @returns {String} + */ + replace(text) { + // This ensures that any html the user puts into the comment field shows as raw html + let replacedText = Str.safeEscape(text); + + this.rules.forEach((rule) => { + replacedText = replacedText.replace(rule.regex, rule.replacement); + }); + + return replacedText; + } +}; From 0f8b37af4bd9b23d356afac7e835a6d8bfa86c1c Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Mon, 28 Sep 2020 20:46:34 -0700 Subject: [PATCH 03/36] fix up style --- src/lib/ExpensiMark.js | 40 +++++++++++++++++++++++---------------- src/lib/actions/Report.js | 2 +- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/src/lib/ExpensiMark.js b/src/lib/ExpensiMark.js index c134363cf4554..0f30d6e514446 100644 --- a/src/lib/ExpensiMark.js +++ b/src/lib/ExpensiMark.js @@ -18,48 +18,56 @@ export default class ExpensiMark { // < is a backtick symbol we are matching on three of them before then after a new line character regex: /```\n((?:(?!```)[\s\S])+)\n```/g, - replacement: (match, firstCapturedGroup) => { - // We're using a function here to perform an additional replace on the content inside the backticks because - // Android is not able to use
 tags and does not respect whitespace characters at all like HTML does.
-                    // We do not want to mess with the new lines here since they need to be converted into 
. And we - // don't want to do this anywhere else since that would break HTML. - return `
${firstCapturedGroup.replace(/(?:(?![\n\r])\s)/g, ' ')}
`; + // We're using a function here to perform an additional replace on the content inside the backticks + // because Android is not able to use
 tags and does not respect whitespace characters at all
+                // like HTML does. We do not want to mess with the new lines here since they need to be converted into
+                // 
. And we don't want to do this anywhere else since that would break HTML. + replacement: (match, firstCapturedGroup) => { + const capturedGroup = firstCapturedGroup.replace(/(?:(?![\n\r])\s)/g, ' '); + return `
${capturedGroup}
`; }, }, + /** * Converts markdown style links to anchor tags e.g. [Expensify](https://www.expensify.com) - * We need to convert before the autolink rule since it will not try to create a link from an existing anchor tag. + * We need to convert before the autolink rule since it will not try to create a link from + * an existing anchor tag. */ { name: 'link', - regex: /\[([\w\s\d\-\?\!,.;:/#_~%{}]+)\]\(((?:\/|https?:\/\/)[\w\d./?=#%{},.;:~_\-]+)\)/, + regex: /\[([\w\s\d\-?!,.;:/#_~%{}]+)\]\(((?:\/|https?:\/\/)[\w\d./?=#%{},.;:~_-]+)\)/, replacement: '$1', }, { name: 'autolink', - regex: /(?![^<]*>|[^<>]*<\/)([_*~]*?)(((?:https?):\/\/|www\.)[^\s<>*~_"\'´.-][^\s<>"\'´]*?\.[a-z\d]+[^\s<>*~"\'\)]*)\1/, + // eslint-disable-next-line max-len + regex: /(?![^<]*>|[^<>]*<\/)([_*~]*?)(((?:https?):\/\/|www\.)[^\s<>*~_"'´.-][^\s<>"'´]*?\.[a-z\d]+[^\s<>*~"')]*)\1/, replacement: '$1$2$1', }, { /** - * Use \b in this case because it will match on words, letters, and _: https://www.rexegg.com/regex-boundaries.html#wordboundary - * The !_blank is to prevent the `target="_blank">` section of the link replacement from being captured - * Additionally, something like `\b\_([^<>]*?)\_\b` doesn't work because it won't replace `_https://www.test.com_` + * Use \b in this case because it will match on words, letters, + * and _: https://www.rexegg.com/regex-boundaries.html#wordboundary + * The !_blank is to prevent the `target="_blank">` section of the + * link replacement from being captured Additionally, something like + * `\b\_([^<>]*?)\_\b` doesn't work because it won't replace `_https://www.test.com_` */ name: 'italic', - regex: /(?!_blank">)\b\_(.*?)\_\b(?![^<]*<\/pre>)/g, + regex: /(?!_blank">)\b_(.*?)_\b(?![^<]*<\/pre>)/g, replacement: '$1' }, { - // Use \B in this case because \b doesn't match * or ~. \B will match everything that \b doesn't, so it works for * and ~: https://www.rexegg.com/regex-boundaries.html#notb + // Use \B in this case because \b doesn't match * or ~. \B + // will match everything that \b doesn't, so it works for * and ~: + // https://www.rexegg.com/regex-boundaries.html#notb name: 'bold', regex: /\B\*(.*?)\*\B(?![^<]*<\/pre>)/g, replacement: '$1' }, { name: 'strikethrough', - regex: /\B\~(.*?)\~\B(?![^<]*<\/pre>)/g, + regex: /\B~(.*?)~\B(?![^<]*<\/pre>)/g, replacement: '$1' }, { @@ -94,4 +102,4 @@ export default class ExpensiMark { return replacedText; } -}; +} diff --git a/src/lib/actions/Report.js b/src/lib/actions/Report.js index 61e4a07fc856d..9184dcec9e123 100644 --- a/src/lib/actions/Report.js +++ b/src/lib/actions/Report.js @@ -1,13 +1,13 @@ import moment from 'moment'; import _ from 'underscore'; import lodashGet from 'lodash.get'; -import ExpensiMark from '../ExpensiMark'; import Ion from '../Ion'; import {queueRequest, onReconnect} from '../API'; import IONKEYS from '../../IONKEYS'; import CONFIG from '../../CONFIG'; import * as Pusher from '../Pusher/pusher'; import promiseAllSettled from '../promiseAllSettled'; +import ExpensiMark from '../ExpensiMark'; import Notification from '../Notification'; import * as PersonalDetails from './PersonalDetails'; import {redirect} from './App'; From 5771855a5d1a1ee8f5cc9873f734843810961334 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Mon, 28 Sep 2020 22:40:44 -0700 Subject: [PATCH 04/36] Fix broken tests --- __tests__/App-test.js | 14 ---- __tests__/ExpensiMark-test.js | 125 ++++++++++++++++++++++++++++++++++ package.json | 3 - src/lib/ExpensiMark.js | 39 +++++------ 4 files changed, 141 insertions(+), 40 deletions(-) delete mode 100644 __tests__/App-test.js create mode 100644 __tests__/ExpensiMark-test.js diff --git a/__tests__/App-test.js b/__tests__/App-test.js deleted file mode 100644 index 35d7eac2c4149..0000000000000 --- a/__tests__/App-test.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * @format - */ - -import 'react-native'; -import React from 'react'; -import renderer from 'react-test-renderer'; -import App from '../src/App'; - -// Note: test renderer must be required after react-native. - -it('renders correctly', () => { - renderer.create(); -}); diff --git a/__tests__/ExpensiMark-test.js b/__tests__/ExpensiMark-test.js new file mode 100644 index 0000000000000..d97971f4dd542 --- /dev/null +++ b/__tests__/ExpensiMark-test.js @@ -0,0 +1,125 @@ +import ExpensiMark from '../src/lib/ExpensiMark'; + +const parser = new ExpensiMark(); + +// Words wrapped in * successfully replaced with +test('Test bold markdown replacement', () => { + const boldTestStartString = 'This is a *sentence,* and it has some *punctuation, words, and spaces*. *test* * testing* test*test*test.'; + expect(parser.replace(boldTestStartString)).toBe('This is a sentence, and it has some punctuation, words, and spaces. test testing test*test*test.'); +}); + +// Words wrapped in _ successfully replaced with +test('Test italic markdown replacement', () => { + const italicTestStartString = 'This is a _sentence,_ and it has some _punctuation, words, and spaces_. _test_ _ testing_ test_test_test.'; + const italicTestReplacedString = 'This is a sentence, and it has some punctuation, words, and spaces. test testing test_test_test.'; + expect(parser.replace(italicTestStartString)).toBe(italicTestReplacedString); +}); + +// Words wrapped in ~ successfully replaced with +test('Test strikethrough markdown replacement', () => { + const strikethroughTestStartString = 'This is a ~sentence,~ and it has some ~punctuation, words, and spaces~. ~test~ ~ testing~ test~test~test.'; + const strikethroughTestReplacedString = 'This is a sentence, and it has some punctuation, words, and spaces. test testing test~test~test.'; + expect(parser.replace(strikethroughTestStartString)).toBe(strikethroughTestReplacedString); +}); + +// Markdown style links replaced successfully +test('Test markdown style links', () => { + const testString = 'Go to [Expensify](https://www.expensify.com) to learn more.'; + const resultString = 'Go to Expensify to learn more.'; + expect(parser.replace(testString)).toBe(resultString); +}); + +// HTML encoded strings unaffected by parser +test('Test HTML encoded strings', () => { + const rawHTMLTestStartString = 'This is a test. None of

these strings

should display as
HTML
.'; + const rawHTMLTestReplacedString = '<em>This is</em> a <strong>test</strong>. None of <h1>these strings</h1> should display <del>as</del> <div>HTML</div>.'; + expect(parser.replace(rawHTMLTestStartString)).toBe(rawHTMLTestReplacedString); +}); + +// New lines characters \\n were successfully replaced with
+test('Test newline markdown replacement', () => { + const newLineTestStartString = 'This sentence has a newline \n Yep just had one \n Oh there it is another one'; + const newLineReplacedString = 'This sentence has a newline
Yep just had one
Oh there it is another one'; + expect(parser.replace(newLineTestStartString)).toBe(newLineReplacedString); +}); + +// Period replacement test +test('Test period replacements', () => { + const periodTestStartString = 'This test ensures that words with trailing... periods.. are. not converted to links. Also, words seperated.by.periods should...not become..links.'; + expect(parser.replace(periodTestStartString)).toBe(periodTestStartString); +}); + +test('Test code fencing', () => { + const codeFenceExampleMarkdown = '```\nconst javaScript = \'javaScript\'\n```'; + expect(parser.replace(codeFenceExampleMarkdown)).toBe('
const javaScript = 'javaScript'
'); +}); + +test('Test code fencing with spaces and new lines', () => { + const codeFenceExample = '```\nconst javaScript = \'javaScript\'\n const php = \'php\'\n```'; + expect(parser.replace(codeFenceExample)).toBe('
const javaScript = 'javaScript'
    const php = 'php'
'); +}); + +test('Test inline code blocks', () => { + const inlineCodeStartString = 'My favorite language is `JavaScript`. How about you?'; + expect(parser.replace(inlineCodeStartString)).toBe('My favorite language is JavaScript. How about you?'); +}); + +test('Test code fencing with ExpensiMark syntax inside', () => { + const codeFenceExample = '```\nThis is how you can write ~strikethrough~, *bold*, _italics_, and [links](https://www.expensify.com)\n```'; + expect(parser.replace(codeFenceExample)).toBe('
This is how you can write ~strikethrough~, *bold*, _italics_, and [links](https://www.expensify.com)
'); +}) + +test('Test combination replacements', () => { + const urlTestStartString = 'Here is a _combination test_ that sees if ~https://www.example.com~ https://otherexample.com links get rendered first followed by *other markup* or if _*two work together*_ as well. This sentence also has a newline \n Yep just had one.'; + const urlTestReplacedString = '<em>Here</em> is a combination test that <marquee>sees</marquee> if https://www.example.com https://otherexample.com links get rendered first followed by other markup or if two work together as well. This sentence also has a newline
Yep just had one.'; + expect(parser.replace(urlTestStartString)).toBe(urlTestReplacedString); +}); + +test('Test wrapped URLs', () => { + const wrappedUrlTestStartString = '~https://www.example.com~ _http://www.test.com_ *http://www.asdf.com/_test*'; + const wrappedUrlTestReplacedString = 'https://www.example.com http://www.test.com' + + ' http://www.asdf.com/_test'; + expect(parser.replace(wrappedUrlTestStartString)).toBe(wrappedUrlTestReplacedString); +}); + +test('Test url replacements', () => { + const urlTestStartString = 'Testing ' + + 'test.com ' + + 'test again ' + + 'http://test.com/test ' + + 'www.test.com ' + + 'https://www.test.com ' + + 'http://test.com)'; + + const urlTestReplacedString = 'Testing ' + + 'test.com ' + + 'test again ' + + 'http://test.com/test ' + + 'www.test.com ' + + 'https://www.test.com ' + + 'http://test.com)'; + + expect(parser.replace(urlTestStartString)).toBe(urlTestReplacedString); +}); + +test('Test markdown style link with various styles', () => { + const testString = + 'Go to ~[Expensify](https://www.expensify.com)~ ' + + '_[Expensify](https://www.expensify.com)_ ' + + '*[Expensify](https://www.expensify.com)* ' + + '[Expensify!](https://www.expensify.com) ' + + '[Expensify?](https://www.expensify.com) ' + + '[Expensify](https://www.expensify-test.com) ' + + '[Expensify](https://www.expensify.com/settings?param={%22section%22:%22account%22})'; + + const resultString = 'Go to Expensify ' + + 'Expensify ' + + 'Expensify ' + + 'Expensify! ' + + 'Expensify? ' + + 'Expensify ' + + 'Expensify'; + + expect(parser.replace(testString)).toBe(resultString); +}); \ No newline at end of file diff --git a/package.json b/package.json index bbb6f982d0a32..29b66509ac565 100644 --- a/package.json +++ b/package.json @@ -88,8 +88,5 @@ "webpack-cli": "^3.3.12", "webpack-dev-server": "^3.11.0", "webpack-merge": "^5.1.1" - }, - "jest": { - "preset": "react-native" } } diff --git a/src/lib/ExpensiMark.js b/src/lib/ExpensiMark.js index 0f30d6e514446..c587c13f89d14 100644 --- a/src/lib/ExpensiMark.js +++ b/src/lib/ExpensiMark.js @@ -18,56 +18,49 @@ export default class ExpensiMark { // < is a backtick symbol we are matching on three of them before then after a new line character regex: /```\n((?:(?!```)[\s\S])+)\n```/g, - - // We're using a function here to perform an additional replace on the content inside the backticks - // because Android is not able to use
 tags and does not respect whitespace characters at all
-                // like HTML does. We do not want to mess with the new lines here since they need to be converted into
-                // 
. And we don't want to do this anywhere else since that would break HTML. replacement: (match, firstCapturedGroup) => { - const capturedGroup = firstCapturedGroup.replace(/(?:(?![\n\r])\s)/g, ' '); - return `
${capturedGroup}
`; + + // We're using a function here to perform an additional replace on the content inside the backticks because + // Android is not able to use
 tags and does not respect whitespace characters at all like HTML does.
+                    // We do not want to mess with the new lines here since they need to be converted into 
. And we + // don't want to do this anywhere else since that would break HTML. + return `
${firstCapturedGroup.replace(/(?:(?![\n\r])\s)/g, ' ')}
`; }, }, /** * Converts markdown style links to anchor tags e.g. [Expensify](https://www.expensify.com) - * We need to convert before the autolink rule since it will not try to create a link from - * an existing anchor tag. + * We need to convert before the autolink rule since it will not try to create a link from an existing anchor tag. */ { name: 'link', - regex: /\[([\w\s\d\-?!,.;:/#_~%{}]+)\]\(((?:\/|https?:\/\/)[\w\d./?=#%{},.;:~_-]+)\)/, + regex: /\[([\w\s\d!?]+)\]\((((?:https?):\/\/|www\.)[-\w\d.\/?=#{%:}]+)\)(?![^<]*<\/pre>)/g, replacement: '$1', }, { name: 'autolink', - // eslint-disable-next-line max-len - regex: /(?![^<]*>|[^<>]*<\/)([_*~]*?)(((?:https?):\/\/|www\.)[^\s<>*~_"'´.-][^\s<>"'´]*?\.[a-z\d]+[^\s<>*~"')]*)\1/, + regex: /(?![^<]*>|[^<>]*<\/)([_*~]*?)(((?:https?):\/\/|www\.)[^\s<>*~_"\'´.-][^\s<>"\'´]*?\.[a-z\d]+[^\s)<>*~"\']*)\1(?![^<]*<\/pre>)/g, replacement: '$1$2$1', }, { /** - * Use \b in this case because it will match on words, letters, - * and _: https://www.rexegg.com/regex-boundaries.html#wordboundary - * The !_blank is to prevent the `target="_blank">` section of the - * link replacement from being captured Additionally, something like - * `\b\_([^<>]*?)\_\b` doesn't work because it won't replace `_https://www.test.com_` + * Use \b in this case because it will match on words, letters, and _: https://www.rexegg.com/regex-boundaries.html#wordboundary + * The !_blank is to prevent the `target="_blank">` section of the link replacement from being captured + * Additionally, something like `\b\_([^<>]*?)\_\b` doesn't work because it won't replace `_https://www.test.com_` */ name: 'italic', - regex: /(?!_blank">)\b_(.*?)_\b(?![^<]*<\/pre>)/g, + regex: /(?!_blank">)\b\_(.*?)\_\b(?![^<]*<\/pre>)/g, replacement: '$1' }, { - // Use \B in this case because \b doesn't match * or ~. \B - // will match everything that \b doesn't, so it works for * and ~: - // https://www.rexegg.com/regex-boundaries.html#notb + // Use \B in this case because \b doesn't match * or ~. \B will match everything that \b doesn't, so it works for * and ~: https://www.rexegg.com/regex-boundaries.html#notb name: 'bold', regex: /\B\*(.*?)\*\B(?![^<]*<\/pre>)/g, replacement: '$1' }, { name: 'strikethrough', - regex: /\B~(.*?)~\B(?![^<]*<\/pre>)/g, + regex: /\B\~(.*?)\~\B(?![^<]*<\/pre>)/g, replacement: '$1' }, { @@ -102,4 +95,4 @@ export default class ExpensiMark { return replacedText; } -} +}; From dacd08505fe66f9c208ebbf6d815d249afdb15e6 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Mon, 28 Sep 2020 22:50:06 -0700 Subject: [PATCH 05/36] fix style in ExpensiMark --- src/lib/ExpensiMark.js | 41 +++++++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/src/lib/ExpensiMark.js b/src/lib/ExpensiMark.js index c587c13f89d14..1964d2147c9af 100644 --- a/src/lib/ExpensiMark.js +++ b/src/lib/ExpensiMark.js @@ -18,49 +18,58 @@ export default class ExpensiMark { // < is a backtick symbol we are matching on three of them before then after a new line character regex: /```\n((?:(?!```)[\s\S])+)\n```/g, - replacement: (match, firstCapturedGroup) => { - // We're using a function here to perform an additional replace on the content inside the backticks because - // Android is not able to use
 tags and does not respect whitespace characters at all like HTML does.
-                    // We do not want to mess with the new lines here since they need to be converted into 
. And we - // don't want to do this anywhere else since that would break HTML. - return `
${firstCapturedGroup.replace(/(?:(?![\n\r])\s)/g, ' ')}
`; + // We're using a function here to perform an additional replace on the content + // inside the backticks because Android is not able to use
 tags and does
+                // not respect whitespace characters at all like HTML does. We do not want to mess
+                // with the new lines here since they need to be converted into 
. And we don't + // want to do this anywhere else since that would break HTML. + replacement: (match, firstCapturedGroup) => { + const group = firstCapturedGroup.replace(/(?:(?![\n\r])\s)/g, ' '); + return `
${group}
`; }, }, /** * Converts markdown style links to anchor tags e.g. [Expensify](https://www.expensify.com) - * We need to convert before the autolink rule since it will not try to create a link from an existing anchor tag. + * We need to convert before the autolink rule since it will not try to create a link + * from an existing anchor tag. */ { name: 'link', - regex: /\[([\w\s\d!?]+)\]\((((?:https?):\/\/|www\.)[-\w\d.\/?=#{%:}]+)\)(?![^<]*<\/pre>)/g, + regex: /\[([\w\s\d!?]+)\]\((((?:https?):\/\/|www\.)[-\w\d./?=#{%:}]+)\)(?![^<]*<\/pre>)/g, replacement: '$1', }, { name: 'autolink', - regex: /(?![^<]*>|[^<>]*<\/)([_*~]*?)(((?:https?):\/\/|www\.)[^\s<>*~_"\'´.-][^\s<>"\'´]*?\.[a-z\d]+[^\s)<>*~"\']*)\1(?![^<]*<\/pre>)/g, + // eslint-disable-next-line max-len + regex: /(?![^<]*>|[^<>]*<\/)([_*~]*?)(((?:https?):\/\/|www\.)[^\s<>*~_"'´.-][^\s<>"'´]*?\.[a-z\d]+[^\s)<>*~"']*)\1(?![^<]*<\/pre>)/g, replacement: '$1$2$1', }, { /** - * Use \b in this case because it will match on words, letters, and _: https://www.rexegg.com/regex-boundaries.html#wordboundary - * The !_blank is to prevent the `target="_blank">` section of the link replacement from being captured - * Additionally, something like `\b\_([^<>]*?)\_\b` doesn't work because it won't replace `_https://www.test.com_` + * Use \b in this case because it will match on words, letters, + * and _: https://www.rexegg.com/regex-boundaries.html#wordboundary + * The !_blank is to prevent the `target="_blank">` section of the + * link replacement from being captured Additionally, something like + * `\b\_([^<>]*?)\_\b` doesn't work because it won't replace + * `_https://www.test.com_` */ name: 'italic', - regex: /(?!_blank">)\b\_(.*?)\_\b(?![^<]*<\/pre>)/g, + regex: /(?!_blank">)\b_(.*?)_\b(?![^<]*<\/pre>)/g, replacement: '$1' }, { - // Use \B in this case because \b doesn't match * or ~. \B will match everything that \b doesn't, so it works for * and ~: https://www.rexegg.com/regex-boundaries.html#notb + // Use \B in this case because \b doesn't match * or ~. + // \B will match everything that \b doesn't, so it works + // for * and ~: https://www.rexegg.com/regex-boundaries.html#notb name: 'bold', regex: /\B\*(.*?)\*\B(?![^<]*<\/pre>)/g, replacement: '$1' }, { name: 'strikethrough', - regex: /\B\~(.*?)\~\B(?![^<]*<\/pre>)/g, + regex: /\B~(.*?)~\B(?![^<]*<\/pre>)/g, replacement: '$1' }, { @@ -95,4 +104,4 @@ export default class ExpensiMark { return replacedText; } -}; +} From 005d168b2f8d999ef0bd6bbcd91ede4ae6e56bf1 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Mon, 28 Sep 2020 22:59:36 -0700 Subject: [PATCH 06/36] disable eslint rule since there are many example where it doesnt make sense --- __tests__/ExpensiMark-test.js | 74 ++++++++++++++++++----------------- 1 file changed, 39 insertions(+), 35 deletions(-) diff --git a/__tests__/ExpensiMark-test.js b/__tests__/ExpensiMark-test.js index d97971f4dd542..6fa8b88fb99b9 100644 --- a/__tests__/ExpensiMark-test.js +++ b/__tests__/ExpensiMark-test.js @@ -1,11 +1,16 @@ +/* eslint-disable max-len */ import ExpensiMark from '../src/lib/ExpensiMark'; const parser = new ExpensiMark(); // Words wrapped in * successfully replaced with test('Test bold markdown replacement', () => { - const boldTestStartString = 'This is a *sentence,* and it has some *punctuation, words, and spaces*. *test* * testing* test*test*test.'; - expect(parser.replace(boldTestStartString)).toBe('This is a sentence, and it has some punctuation, words, and spaces. test testing test*test*test.'); + const boldTestStartString = 'This is a *sentence,* and it has some *punctuation, words, and spaces*. ' + + '*test* * testing* test*test*test.'; + const boldTestReplacedString = 'This is a sentence, and it has some punctuation, words, and spaces. ' + + 'test testing test*test*test.'; + + expect(parser.replace(boldTestStartString)).toBe(boldTestReplacedString); }); // Words wrapped in _ successfully replaced with @@ -67,7 +72,7 @@ test('Test inline code blocks', () => { test('Test code fencing with ExpensiMark syntax inside', () => { const codeFenceExample = '```\nThis is how you can write ~strikethrough~, *bold*, _italics_, and [links](https://www.expensify.com)\n```'; expect(parser.replace(codeFenceExample)).toBe('
This is how you can write ~strikethrough~, *bold*, _italics_, and [links](https://www.expensify.com)
'); -}) +}); test('Test combination replacements', () => { const urlTestStartString = 'Here is a _combination test_ that sees if ~https://www.example.com~ https://otherexample.com links get rendered first followed by *other markup* or if _*two work together*_ as well. This sentence also has a newline \n Yep just had one.'; @@ -84,42 +89,41 @@ test('Test wrapped URLs', () => { }); test('Test url replacements', () => { - const urlTestStartString = 'Testing ' + - 'test.com ' + - 'test again ' + - 'http://test.com/test ' + - 'www.test.com ' + - 'https://www.test.com ' + - 'http://test.com)'; - - const urlTestReplacedString = 'Testing ' + - 'test.com ' + - 'test again ' + - 'http://test.com/test ' + - 'www.test.com ' + - 'https://www.test.com ' + - 'http://test.com)'; + const urlTestStartString = 'Testing ' + + 'test.com ' + + 'test again ' + + 'http://test.com/test ' + + 'www.test.com ' + + 'https://www.test.com ' + + 'http://test.com)'; + + const urlTestReplacedString = 'Testing ' + + 'test.com ' + + 'test again ' + + 'http://test.com/test ' + + 'www.test.com ' + + 'https://www.test.com ' + + 'http://test.com)'; expect(parser.replace(urlTestStartString)).toBe(urlTestReplacedString); }); test('Test markdown style link with various styles', () => { - const testString = - 'Go to ~[Expensify](https://www.expensify.com)~ ' + - '_[Expensify](https://www.expensify.com)_ ' + - '*[Expensify](https://www.expensify.com)* ' + - '[Expensify!](https://www.expensify.com) ' + - '[Expensify?](https://www.expensify.com) ' + - '[Expensify](https://www.expensify-test.com) ' + - '[Expensify](https://www.expensify.com/settings?param={%22section%22:%22account%22})'; - - const resultString = 'Go to Expensify ' + - 'Expensify ' + - 'Expensify ' + - 'Expensify! ' + - 'Expensify? ' + - 'Expensify ' + - 'Expensify'; + const testString = 'Go to ~[Expensify](https://www.expensify.com)~ ' + + '_[Expensify](https://www.expensify.com)_ ' + + '*[Expensify](https://www.expensify.com)* ' + + '[Expensify!](https://www.expensify.com) ' + + '[Expensify?](https://www.expensify.com) ' + + '[Expensify](https://www.expensify-test.com) ' + + '[Expensify](https://www.expensify.com/settings?param={%22section%22:%22account%22})'; + + const resultString = 'Go to Expensify ' + + 'Expensify ' + + 'Expensify ' + + 'Expensify! ' + + 'Expensify? ' + + 'Expensify ' + + 'Expensify'; expect(parser.replace(testString)).toBe(resultString); -}); \ No newline at end of file +}); From dc3f591f399142bf9e613d4069b5247a9e87ad91 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Mon, 28 Sep 2020 23:00:39 -0700 Subject: [PATCH 07/36] add jest config --- jest.config.js | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 jest.config.js diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000000000..979d4f36f86b1 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,6 @@ +module.exports = { + preset: 'react-native', + transform: { + '^.+\\.js$': require.resolve('react-native/jest/preprocessor.js'), + }, +}; From ddd56b456cb6dd14ab130669bea2b32e54396c94 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Mon, 28 Sep 2020 23:03:53 -0700 Subject: [PATCH 08/36] run tests in build step --- .github/workflows/lint.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 58924dc6f1bde..cb42e66fbc8ae 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -18,5 +18,6 @@ jobs: uses: actions/setup-node@v1 - run: npm install - run: npm run lint + - run: npm run test env: CI: true From f59bffa9f4672e7996aeafdad56a111eb4c8061f Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Mon, 28 Sep 2020 23:04:33 -0700 Subject: [PATCH 09/36] guess i cannot do that --- .github/workflows/lint.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index cb42e66fbc8ae..58924dc6f1bde 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -18,6 +18,5 @@ jobs: uses: actions/setup-node@v1 - run: npm install - run: npm run lint - - run: npm run test env: CI: true From 7f0333e2e0577b2d30688afeb0b60718fcbd218d Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Tue, 29 Sep 2020 19:08:58 -0700 Subject: [PATCH 10/36] Add styles and style code/pre tags --- .../home/report/ReportActionItemFragment.js | 10 +++++++ src/style/StyleSheet.js | 27 ++++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/page/home/report/ReportActionItemFragment.js b/src/page/home/report/ReportActionItemFragment.js index b92d9f0dd0ef4..ea924cd504591 100644 --- a/src/page/home/report/ReportActionItemFragment.js +++ b/src/page/home/report/ReportActionItemFragment.js @@ -43,6 +43,16 @@ class ReportActionItemFragment extends React.PureComponent { {children} ), + pre: (htmlAttribs, children) => ( + + {children} + + ), + code: (htmlAttribs, children) => ( + + {children} + + ), }; } diff --git a/src/style/StyleSheet.js b/src/style/StyleSheet.js index f789548f013c4..15c20c6907e1b 100644 --- a/src/style/StyleSheet.js +++ b/src/style/StyleSheet.js @@ -14,6 +14,7 @@ const colors = { heading: '#37444C', icon: '#C6C9CA', text: '#4A5960', + textBackground: '#F0F0F0', textReversed: '#FFFFFF', textSupporting: '#7D8B8F', red: '#E84A3B', @@ -651,7 +652,23 @@ const styles = { }, }; +const baseCodeTagStyles = { + backgroundColor: colors.textBackground, + borderRadius: 4, + borderWidth: 1, + borderColor: colors.border, +}; + const webViewStyles = { + preTagStyle: { + ...baseCodeTagStyles, + padding: 10, + }, + codeTagStyle: { + ...baseCodeTagStyles, + paddingLeft: 3, + paddingRight: 3, + }, tagStyles: { em: { fontStyle: 'italic', @@ -669,7 +686,15 @@ const webViewStyles = { a: { color: colors.blue - } + }, + + pre: { + fontFamily: 'monospace', + }, + + code: { + fontFamily: 'monospace', + }, }, baseFontStyle: { From 50d387dfd0d80713d69b32cadfb3ec7c7dba37e2 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Tue, 29 Sep 2020 20:17:17 -0700 Subject: [PATCH 11/36] looks good on web --- .../home/report/ReportActionItemFragment.js | 13 ++++++++----- src/style/StyleSheet.js | 18 +++++++++--------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/page/home/report/ReportActionItemFragment.js b/src/page/home/report/ReportActionItemFragment.js index ea924cd504591..9ad068cae43d0 100644 --- a/src/page/home/report/ReportActionItemFragment.js +++ b/src/page/home/report/ReportActionItemFragment.js @@ -1,7 +1,7 @@ import React from 'react'; import HTML from 'react-native-render-html'; import { - Linking, ActivityIndicator, View, Platform + Linking, ActivityIndicator, View, Platform, } from 'react-native'; import PropTypes from 'prop-types'; import Str from '../../../lib/Str'; @@ -43,13 +43,16 @@ class ReportActionItemFragment extends React.PureComponent { {children} ), - pre: (htmlAttribs, children) => ( - + pre: (htmlAttribs, children, convertedCSSStyles, passProps) => ( + {children} ), - code: (htmlAttribs, children) => ( - + code: (htmlAttribs, children, convertedCSSStyles, passProps) => ( + {children} ), diff --git a/src/style/StyleSheet.js b/src/style/StyleSheet.js index 15c20c6907e1b..fbedeba1c515c 100644 --- a/src/style/StyleSheet.js +++ b/src/style/StyleSheet.js @@ -1,4 +1,5 @@ // We place items a percentage to the safe area on the top or bottom of the screen +import {Platform} from 'react-native'; import fontFamily from './fontFamily'; const safeInsertPercentage = 0.7; @@ -652,11 +653,12 @@ const styles = { }, }; +const monospaceFont = Platform.OS === 'ios' ? 'Courier New' : 'monospace'; const baseCodeTagStyles = { - backgroundColor: colors.textBackground, - borderRadius: 4, borderWidth: 1, + borderRadius: 5, borderColor: colors.border, + backgroundColor: colors.textBackground, }; const webViewStyles = { @@ -664,11 +666,6 @@ const webViewStyles = { ...baseCodeTagStyles, padding: 10, }, - codeTagStyle: { - ...baseCodeTagStyles, - paddingLeft: 3, - paddingRight: 3, - }, tagStyles: { em: { fontStyle: 'italic', @@ -689,11 +686,14 @@ const webViewStyles = { }, pre: { - fontFamily: 'monospace', + fontFamily: monospaceFont, }, code: { - fontFamily: 'monospace', + ...baseCodeTagStyles, + fontFamily: monospaceFont, + paddingLeft: 3, + paddingRight: 3, }, }, From 4a4f48ff6db5f7466628dc93d9c892607cc32c61 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Wed, 30 Sep 2020 11:46:50 -0700 Subject: [PATCH 12/36] fix iOS --- src/page/home/report/ReportActionItemFragment.js | 8 +++++--- src/style/StyleSheet.js | 7 +++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/page/home/report/ReportActionItemFragment.js b/src/page/home/report/ReportActionItemFragment.js index 9ad068cae43d0..bcb75b39b7624 100644 --- a/src/page/home/report/ReportActionItemFragment.js +++ b/src/page/home/report/ReportActionItemFragment.js @@ -52,9 +52,11 @@ class ReportActionItemFragment extends React.PureComponent { ), code: (htmlAttribs, children, convertedCSSStyles, passProps) => ( - - {children} - + + + {children} + + ), }; } diff --git a/src/style/StyleSheet.js b/src/style/StyleSheet.js index fbedeba1c515c..3524204cecdda 100644 --- a/src/style/StyleSheet.js +++ b/src/style/StyleSheet.js @@ -666,6 +666,13 @@ const webViewStyles = { ...baseCodeTagStyles, padding: 10, }, + codeTagStyle: { + ...baseCodeTagStyles, + paddingLeft: 5, + paddingRight: 5, + marginBottom: -5, + alignSelf: 'flex-start', + }, tagStyles: { em: { fontStyle: 'italic', From 5d334f2a102cc49275350ae5dad7115839f2f9d7 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Wed, 30 Sep 2020 12:01:06 -0700 Subject: [PATCH 13/36] add monospace GTA font --- assets/fonts/GT-America-Exp-Mono-Regular.otf | Bin 0 -> 60428 bytes ios/ReactNativeChat.xcodeproj/project.pbxproj | 4 ++++ ios/ReactNativeChat/Info.plist | 19 +++++++++--------- src/style/fontFamily/index.js | 1 + 4 files changed, 15 insertions(+), 9 deletions(-) create mode 100644 assets/fonts/GT-America-Exp-Mono-Regular.otf diff --git a/assets/fonts/GT-America-Exp-Mono-Regular.otf b/assets/fonts/GT-America-Exp-Mono-Regular.otf new file mode 100644 index 0000000000000000000000000000000000000000..2786ecdc0cf55a1b8839c41a2c66c2d208f5a587 GIT binary patch literal 60428 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 R-5TBa4@0c-YZa_W{{bXNyz2k} literal 0 HcmV?d00001 diff --git a/ios/ReactNativeChat.xcodeproj/project.pbxproj b/ios/ReactNativeChat.xcodeproj/project.pbxproj index 911b93d1d30b7..1a5d133e40831 100644 --- a/ios/ReactNativeChat.xcodeproj/project.pbxproj +++ b/ios/ReactNativeChat.xcodeproj/project.pbxproj @@ -19,6 +19,7 @@ 7F7721B764D444D6861A9B39 /* GTAmericaExp-Thin.otf in Resources */ = {isa = PBXBuildFile; fileRef = A292718541C841859D97DF2F /* GTAmericaExp-Thin.otf */; }; 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; CC07911F22C2437DA6708BD2 /* GTAmericaExp-Medium.otf in Resources */ = {isa = PBXBuildFile; fileRef = AE65058949E14DA5A2D5435D /* GTAmericaExp-Medium.otf */; }; + 8A18C9C6B3F64600B98BC98A /* GT-America-Exp-Mono-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = C7D0D4F57818445CAA756893 /* GT-America-Exp-Mono-Regular.otf */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -56,6 +57,7 @@ C6C1D4F5C262ACDAF1800CAD /* Pods-ReactNativeChat.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeChat.release.xcconfig"; path = "Target Support Files/Pods-ReactNativeChat/Pods-ReactNativeChat.release.xcconfig"; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; }; + C7D0D4F57818445CAA756893 /* GT-America-Exp-Mono-Regular.otf */ = {isa = PBXFileReference; name = "GT-America-Exp-Mono-Regular.otf"; path = "../assets/fonts/GT-America-Exp-Mono-Regular.otf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -160,6 +162,7 @@ AE65058949E14DA5A2D5435D /* GTAmericaExp-Medium.otf */, 8C7003903C1E4957824899BB /* GTAmericaExp-Regular.otf */, A292718541C841859D97DF2F /* GTAmericaExp-Thin.otf */, + C7D0D4F57818445CAA756893 /* GT-America-Exp-Mono-Regular.otf */, ); name = Resources; sourceTree = ""; @@ -277,6 +280,7 @@ CC07911F22C2437DA6708BD2 /* GTAmericaExp-Medium.otf in Resources */, 4912B60FA66C4604A56AD575 /* GTAmericaExp-Regular.otf in Resources */, 7F7721B764D444D6861A9B39 /* GTAmericaExp-Thin.otf in Resources */, + 8A18C9C6B3F64600B98BC98A /* GT-America-Exp-Mono-Regular.otf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/ios/ReactNativeChat/Info.plist b/ios/ReactNativeChat/Info.plist index b798b379e3d74..58d3eb9219101 100644 --- a/ios/ReactNativeChat/Info.plist +++ b/ios/ReactNativeChat/Info.plist @@ -23,35 +23,35 @@ CFBundleVersion 78 ITSAppUsesNonExemptEncryption - + LSRequiresIPhoneOS - + NSAppTransportSecurity NSAllowsArbitraryLoads - + NSExceptionDomains localhost NSExceptionAllowsInsecureHTTPLoads - + NSIncludesSubdomains - + www.expensify.com.dev NSExceptionAllowsInsecureHTTPLoads - + NSIncludesSubdomains - + NSCameraUsageDescription Your camera is used to create chat attachments. NSLocationWhenInUseUsageDescription - + NSPhotoLibraryAddUsageDescription Your camera roll is used to store chat attachments. NSPhotoLibraryUsageDescription @@ -63,6 +63,7 @@ GTAmericaExp-Medium.otf GTAmericaExp-Regular.otf GTAmericaExp-Thin.otf + GT-America-Exp-Mono-Regular.otf UILaunchStoryboardName LaunchScreen @@ -78,6 +79,6 @@ UIInterfaceOrientationPortraitUpsideDown UIViewControllerBasedStatusBarAppearance - + diff --git a/src/style/fontFamily/index.js b/src/style/fontFamily/index.js index 47b13f74fb3aa..d51bc85b81306 100644 --- a/src/style/fontFamily/index.js +++ b/src/style/fontFamily/index.js @@ -1,5 +1,6 @@ const fontFamily = { GTA: 'GTAmericaExp-Regular', + GTA_MONO: 'GTAmericaExpMono-Rg', SYSTEM: 'System', }; From d4bac0e6ee979355212704ddca1be41984d0d4c4 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Wed, 30 Sep 2020 15:57:33 -0700 Subject: [PATCH 14/36] add monospace font --- .../main/assets/fonts/GTAmericaExpMono-Rg.otf | Bin 0 -> 60428 bytes assets/fonts/GTAmericaExpMono-Rg.otf | Bin 0 -> 60428 bytes ios/ReactNativeChat.xcodeproj/project.pbxproj | 8 +++++--- ios/ReactNativeChat/Info.plist | 1 + src/components/InlineCodeBlock/index.android.js | 9 +++++++++ src/components/InlineCodeBlock/index.ios.js | 9 +++++++++ src/components/InlineCodeBlock/index.js | 9 +++++++++ .../home/report/ReportActionItemFragment.js | 9 ++++----- src/style/StyleSheet.js | 14 +++++++------- 9 files changed, 44 insertions(+), 15 deletions(-) create mode 100644 android/app/src/main/assets/fonts/GTAmericaExpMono-Rg.otf create mode 100644 assets/fonts/GTAmericaExpMono-Rg.otf create mode 100644 src/components/InlineCodeBlock/index.android.js create mode 100644 src/components/InlineCodeBlock/index.ios.js create mode 100644 src/components/InlineCodeBlock/index.js diff --git a/android/app/src/main/assets/fonts/GTAmericaExpMono-Rg.otf b/android/app/src/main/assets/fonts/GTAmericaExpMono-Rg.otf new file mode 100644 index 0000000000000000000000000000000000000000..2786ecdc0cf55a1b8839c41a2c66c2d208f5a587 GIT binary patch literal 60428 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 R-5TBa4@0c-YZa_W{{bXNyz2k} literal 0 HcmV?d00001 diff --git a/assets/fonts/GTAmericaExpMono-Rg.otf b/assets/fonts/GTAmericaExpMono-Rg.otf new file mode 100644 index 0000000000000000000000000000000000000000..2786ecdc0cf55a1b8839c41a2c66c2d208f5a587 GIT binary patch literal 60428 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 R-5TBa4@0c-YZa_W{{bXNyz2k} literal 0 HcmV?d00001 diff --git a/ios/ReactNativeChat.xcodeproj/project.pbxproj b/ios/ReactNativeChat.xcodeproj/project.pbxproj index 1a5d133e40831..502073084edfd 100644 --- a/ios/ReactNativeChat.xcodeproj/project.pbxproj +++ b/ios/ReactNativeChat.xcodeproj/project.pbxproj @@ -10,6 +10,7 @@ 00E356F31AD99517003FC87E /* ReactNativeChatTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* ReactNativeChatTests.m */; }; 097C76E5807C5DFC565DC655 /* libPods-ReactNativeChat-ReactNativeChatTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C4F81DB9C6DA6418525441E5 /* libPods-ReactNativeChat-ReactNativeChatTests.a */; }; 11FA3546D54246CD8F819152 /* GTAmericaExp-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = A5AAD008CBD84A6CAEB9AC97 /* GTAmericaExp-Bold.otf */; }; + 12DD1878FCB9487C9F031C86 /* GTAmericaExpMono-Rg.otf in Resources */ = {isa = PBXBuildFile; fileRef = 8437A5A38F2047E0BCCD7C2F /* GTAmericaExpMono-Rg.otf */; }; 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; @@ -19,7 +20,6 @@ 7F7721B764D444D6861A9B39 /* GTAmericaExp-Thin.otf in Resources */ = {isa = PBXBuildFile; fileRef = A292718541C841859D97DF2F /* GTAmericaExp-Thin.otf */; }; 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; CC07911F22C2437DA6708BD2 /* GTAmericaExp-Medium.otf in Resources */ = {isa = PBXBuildFile; fileRef = AE65058949E14DA5A2D5435D /* GTAmericaExp-Medium.otf */; }; - 8A18C9C6B3F64600B98BC98A /* GT-America-Exp-Mono-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = C7D0D4F57818445CAA756893 /* GT-America-Exp-Mono-Regular.otf */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -47,6 +47,7 @@ 67D5C3A6A7FA417C8A853FC1 /* GTAmericaExp-Light.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "GTAmericaExp-Light.otf"; path = "../assets/fonts/GTAmericaExp-Light.otf"; sourceTree = ""; }; 6ABF95746519766B23B4E2D0 /* libPods-ReactNativeChat.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ReactNativeChat.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = ReactNativeChat/LaunchScreen.storyboard; sourceTree = ""; }; + 8437A5A38F2047E0BCCD7C2F /* GTAmericaExpMono-Rg.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "GTAmericaExpMono-Rg.otf"; path = "../assets/fonts/GTAmericaExpMono-Rg.otf"; sourceTree = ""; }; 8C7003903C1E4957824899BB /* GTAmericaExp-Regular.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "GTAmericaExp-Regular.otf"; path = "../assets/fonts/GTAmericaExp-Regular.otf"; sourceTree = ""; }; 9B9FEA91E46D2B2609028E69 /* Pods-ReactNativeChat.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeChat.debug.xcconfig"; path = "Target Support Files/Pods-ReactNativeChat/Pods-ReactNativeChat.debug.xcconfig"; sourceTree = ""; }; A292718541C841859D97DF2F /* GTAmericaExp-Thin.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "GTAmericaExp-Thin.otf"; path = "../assets/fonts/GTAmericaExp-Thin.otf"; sourceTree = ""; }; @@ -55,9 +56,9 @@ BA6C613DE6755E40F7EDDC68 /* Pods-ReactNativeChat-ReactNativeChatTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeChat-ReactNativeChatTests.debug.xcconfig"; path = "Target Support Files/Pods-ReactNativeChat-ReactNativeChatTests/Pods-ReactNativeChat-ReactNativeChatTests.debug.xcconfig"; sourceTree = ""; }; C4F81DB9C6DA6418525441E5 /* libPods-ReactNativeChat-ReactNativeChatTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ReactNativeChat-ReactNativeChatTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; C6C1D4F5C262ACDAF1800CAD /* Pods-ReactNativeChat.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeChat.release.xcconfig"; path = "Target Support Files/Pods-ReactNativeChat/Pods-ReactNativeChat.release.xcconfig"; sourceTree = ""; }; + C7D0D4F57818445CAA756893 /* GT-America-Exp-Mono-Regular.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "GT-America-Exp-Mono-Regular.otf"; path = "../assets/fonts/GT-America-Exp-Mono-Regular.otf"; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; }; - C7D0D4F57818445CAA756893 /* GT-America-Exp-Mono-Regular.otf */ = {isa = PBXFileReference; name = "GT-America-Exp-Mono-Regular.otf"; path = "../assets/fonts/GT-America-Exp-Mono-Regular.otf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -163,6 +164,7 @@ 8C7003903C1E4957824899BB /* GTAmericaExp-Regular.otf */, A292718541C841859D97DF2F /* GTAmericaExp-Thin.otf */, C7D0D4F57818445CAA756893 /* GT-America-Exp-Mono-Regular.otf */, + 8437A5A38F2047E0BCCD7C2F /* GTAmericaExpMono-Rg.otf */, ); name = Resources; sourceTree = ""; @@ -280,7 +282,7 @@ CC07911F22C2437DA6708BD2 /* GTAmericaExp-Medium.otf in Resources */, 4912B60FA66C4604A56AD575 /* GTAmericaExp-Regular.otf in Resources */, 7F7721B764D444D6861A9B39 /* GTAmericaExp-Thin.otf in Resources */, - 8A18C9C6B3F64600B98BC98A /* GT-America-Exp-Mono-Regular.otf in Resources */, + 12DD1878FCB9487C9F031C86 /* GTAmericaExpMono-Rg.otf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/ios/ReactNativeChat/Info.plist b/ios/ReactNativeChat/Info.plist index 58d3eb9219101..fa66374a9705a 100644 --- a/ios/ReactNativeChat/Info.plist +++ b/ios/ReactNativeChat/Info.plist @@ -64,6 +64,7 @@ GTAmericaExp-Regular.otf GTAmericaExp-Thin.otf GT-America-Exp-Mono-Regular.otf + GTAmericaExpMono-Rg.otf UILaunchStoryboardName LaunchScreen diff --git a/src/components/InlineCodeBlock/index.android.js b/src/components/InlineCodeBlock/index.android.js new file mode 100644 index 0000000000000..69af16cf71938 --- /dev/null +++ b/src/components/InlineCodeBlock/index.android.js @@ -0,0 +1,9 @@ +import React from 'react'; +import {View} from 'react-native'; +import {webViewStyles} from '../../style/StyleSheet'; + +export default ({children}) => ( + + {children} + +); diff --git a/src/components/InlineCodeBlock/index.ios.js b/src/components/InlineCodeBlock/index.ios.js new file mode 100644 index 0000000000000..0691fa7cdf213 --- /dev/null +++ b/src/components/InlineCodeBlock/index.ios.js @@ -0,0 +1,9 @@ +import React from 'react'; +import {View} from 'react-native'; +import {webViewStyles} from '../../style/StyleSheet'; + +export default ({children}) => ( + + {children} + +); diff --git a/src/components/InlineCodeBlock/index.js b/src/components/InlineCodeBlock/index.js new file mode 100644 index 0000000000000..12cb4e669952a --- /dev/null +++ b/src/components/InlineCodeBlock/index.js @@ -0,0 +1,9 @@ +import React from 'react'; +import {Text} from 'react-native'; +import {webViewStyles} from '../../style/StyleSheet'; + +export default ({children}) => ( + + {children} + +); diff --git a/src/page/home/report/ReportActionItemFragment.js b/src/page/home/report/ReportActionItemFragment.js index bcb75b39b7624..724cf8329fb1e 100644 --- a/src/page/home/report/ReportActionItemFragment.js +++ b/src/page/home/report/ReportActionItemFragment.js @@ -10,6 +10,7 @@ import styles, {webViewStyles, colors} from '../../../style/StyleSheet'; import Text from '../../../components/Text'; import AnchorForCommentsOnly from '../../../components/AnchorForCommentsOnly'; import {getAuthToken} from '../../../lib/API'; +import InlineCodeBlock from '../../../components/InlineCodeBlock'; const propTypes = { // The message fragment needing to be displayed @@ -52,11 +53,9 @@ class ReportActionItemFragment extends React.PureComponent { ), code: (htmlAttribs, children, convertedCSSStyles, passProps) => ( - - - {children} - - + + {children} + ), }; } diff --git a/src/style/StyleSheet.js b/src/style/StyleSheet.js index 3524204cecdda..b83e58ccad2a7 100644 --- a/src/style/StyleSheet.js +++ b/src/style/StyleSheet.js @@ -653,7 +653,7 @@ const styles = { }, }; -const monospaceFont = Platform.OS === 'ios' ? 'Courier New' : 'monospace'; +const monospaceFont = Platform.OS === 'web' ? 'monospace' : fontFamily.GTA_MONO; const baseCodeTagStyles = { borderWidth: 1, borderRadius: 5, @@ -664,13 +664,16 @@ const baseCodeTagStyles = { const webViewStyles = { preTagStyle: { ...baseCodeTagStyles, - padding: 10, + paddingTop: 4, + paddingBottom: 5, + paddingRight: 8, + paddingLeft: 8, }, codeTagStyle: { ...baseCodeTagStyles, paddingLeft: 5, paddingRight: 5, - marginBottom: -5, + paddingBottom: 2, alignSelf: 'flex-start', }, tagStyles: { @@ -697,17 +700,14 @@ const webViewStyles = { }, code: { - ...baseCodeTagStyles, fontFamily: monospaceFont, - paddingLeft: 3, - paddingRight: 3, }, }, baseFontStyle: { color: colors.text, fontSize: 15, - fontFamily: fontFamily.GTA + fontFamily: fontFamily.GTA, } }; From 443c1ba0b1b847137d658a3c6d77d69a5d18033f Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Wed, 30 Sep 2020 17:13:23 -0700 Subject: [PATCH 15/36] remove ExpensiMark from RNC --- __tests__/ExpensiMark-test.js | 2 +- package-lock.json | 107 ++++++++++++++++++++++++++++++++++ package.json | 1 + src/lib/ExpensiMark.js | 107 ---------------------------------- src/lib/actions/Report.js | 2 +- 5 files changed, 110 insertions(+), 109 deletions(-) delete mode 100644 src/lib/ExpensiMark.js diff --git a/__tests__/ExpensiMark-test.js b/__tests__/ExpensiMark-test.js index 6fa8b88fb99b9..96c7a98dfdadb 100644 --- a/__tests__/ExpensiMark-test.js +++ b/__tests__/ExpensiMark-test.js @@ -1,5 +1,5 @@ /* eslint-disable max-len */ -import ExpensiMark from '../src/lib/ExpensiMark'; +import {ExpensiMark} from 'js-libs'; const parser = new ExpensiMark(); diff --git a/package-lock.json b/package-lock.json index f50cf13f0b6fd..454b2015a9ec1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4277,6 +4277,11 @@ } } }, + "classnames": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.5.tgz", + "integrity": "sha1-+zgB1FNGdknvNgPH1hoCvRKb3m0=" + }, "clean-css": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", @@ -4388,6 +4393,16 @@ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" }, + "clipboard": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.4.tgz", + "integrity": "sha512-Vw26VSLRpJfBofiVaFb/I8PVfdI1OxKcYShe6fm0sP/DtmiWQNCjhM/okTvdCo0G+lMMm1rMYbk4IK4x1X+kgQ==", + "requires": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, "cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", @@ -5461,6 +5476,11 @@ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, + "delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" + }, "denodeify": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", @@ -8798,6 +8818,14 @@ } } }, + "good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", + "requires": { + "delegate": "^3.1.2" + } + }, "got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -10696,6 +10724,11 @@ "resolved": "https://registry.npmjs.org/jetifier/-/jetifier-1.6.6.tgz", "integrity": "sha512-JNAkmPeB/GS2tCRqUzRPsTOHpGDah7xP18vGJfIjZC+W2sxEHbxgJxetIjIqhjQ3yYbYNEELkM/spKLtwoOSUQ==" }, + "jquery": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz", + "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg==" + }, "js-beautify": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.11.0.tgz", @@ -10717,6 +10750,65 @@ } } }, + "js-libs": { + "version": "git+ssh://git@github.com/Expensify/JS-Libs.git#8071f8a21be447024010800c276844999d04b060", + "from": "git+ssh://git@github.com/Expensify/JS-Libs.git#8071f8a21be447024010800c276844999d04b060", + "requires": { + "classnames": "2.2.5", + "clipboard": "2.0.4", + "jquery": "3.3.1", + "lodash.get": "4.4.2", + "lodash.has": "4.5.2", + "moment": "2.20.1", + "prop-types": "15.7.2", + "react": "16.12.0", + "react-dom": "16.12.0", + "simply-deferred": "3.0.0", + "underscore": "1.9.1" + }, + "dependencies": { + "moment": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.20.1.tgz", + "integrity": "sha512-Yh9y73JRljxW5QxN08Fner68eFLxM5ynNOAw2LbIB1YAGeQzZT8QFSUvkAz609Zf+IHhhaUxqZK8dG3W/+HEvg==" + }, + "react": { + "version": "16.12.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.12.0.tgz", + "integrity": "sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + } + }, + "react-dom": { + "version": "16.12.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.12.0.tgz", + "integrity": "sha512-LMxFfAGrcS3kETtQaCkTKjMiifahaMySFDn71fZUNpPHZQEzmk/GiAeIT8JSOrHB23fnuCOMruL2a8NYlw+8Gw==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.18.0" + } + }, + "scheduler": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.18.0.tgz", + "integrity": "sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" + } + } + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -16045,6 +16137,11 @@ "ajv-keywords": "^3.1.0" } }, + "select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=" + }, "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -16297,6 +16394,11 @@ "plist": "^3.0.1" } }, + "simply-deferred": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/simply-deferred/-/simply-deferred-3.0.0.tgz", + "integrity": "sha1-bWagZMHysHERyATg7EMlp7UYYp0=" + }, "sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -17215,6 +17317,11 @@ "setimmediate": "^1.0.4" } }, + "tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + }, "tiny-invariant": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", diff --git a/package.json b/package.json index b7e348a973fa6..9d2527ccad434 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "electron-updater": "^4.3.4", "file-loader": "^6.0.0", "html-entities": "^1.3.1", + "js-libs": "git+ssh://git@github.com/Expensify/JS-Libs.git#8071f8a21be447024010800c276844999d04b060", "lodash.get": "^4.4.2", "lodash.has": "^4.5.2", "lodash.orderby": "^4.6.0", diff --git a/src/lib/ExpensiMark.js b/src/lib/ExpensiMark.js deleted file mode 100644 index 1964d2147c9af..0000000000000 --- a/src/lib/ExpensiMark.js +++ /dev/null @@ -1,107 +0,0 @@ -import Str from './Str'; - -export default class ExpensiMark { - constructor() { - /** - * The list of regex replacements to do on a comment. Check the link regex is first so links are processed - * before other delimiters - * - * @type {Object[]} - */ - this.rules = [ - /** - * Apply the code-fence first so that we avoid replacing anything inside of it that we're not supposed to - * (aka any rule with the '(?![^<]*<\/pre>)' avoidance in it - */ - { - name: 'codeFence', - - // < is a backtick symbol we are matching on three of them before then after a new line character - regex: /```\n((?:(?!```)[\s\S])+)\n```/g, - - // We're using a function here to perform an additional replace on the content - // inside the backticks because Android is not able to use
 tags and does
-                // not respect whitespace characters at all like HTML does. We do not want to mess
-                // with the new lines here since they need to be converted into 
. And we don't - // want to do this anywhere else since that would break HTML. - replacement: (match, firstCapturedGroup) => { - const group = firstCapturedGroup.replace(/(?:(?![\n\r])\s)/g, ' '); - return `
${group}
`; - }, - }, - - /** - * Converts markdown style links to anchor tags e.g. [Expensify](https://www.expensify.com) - * We need to convert before the autolink rule since it will not try to create a link - * from an existing anchor tag. - */ - { - name: 'link', - regex: /\[([\w\s\d!?]+)\]\((((?:https?):\/\/|www\.)[-\w\d./?=#{%:}]+)\)(?![^<]*<\/pre>)/g, - replacement: '
$1', - }, - { - name: 'autolink', - // eslint-disable-next-line max-len - regex: /(?![^<]*>|[^<>]*<\/)([_*~]*?)(((?:https?):\/\/|www\.)[^\s<>*~_"'´.-][^\s<>"'´]*?\.[a-z\d]+[^\s)<>*~"']*)\1(?![^<]*<\/pre>)/g, - replacement: '$1$2$1', - }, - { - /** - * Use \b in this case because it will match on words, letters, - * and _: https://www.rexegg.com/regex-boundaries.html#wordboundary - * The !_blank is to prevent the `target="_blank">` section of the - * link replacement from being captured Additionally, something like - * `\b\_([^<>]*?)\_\b` doesn't work because it won't replace - * `_https://www.test.com_` - */ - name: 'italic', - regex: /(?!_blank">)\b_(.*?)_\b(?![^<]*<\/pre>)/g, - replacement: '$1' - }, - { - // Use \B in this case because \b doesn't match * or ~. - // \B will match everything that \b doesn't, so it works - // for * and ~: https://www.rexegg.com/regex-boundaries.html#notb - name: 'bold', - regex: /\B\*(.*?)\*\B(?![^<]*<\/pre>)/g, - replacement: '$1' - }, - { - name: 'strikethrough', - regex: /\B~(.*?)~\B(?![^<]*<\/pre>)/g, - replacement: '$1' - }, - { - name: 'inlineCodeBlock', - - // Use the url escaped version of a backtick (`) symbol - regex: /\B`(.*?)`\B(?![^<]*<\/pre>)/g, - replacement: '$1', - }, - { - name: 'newline', - regex: /\n/g, - replacement: '
', - }, - ]; - } - - /** - * Replaces markdown with html elements - * - * @param {String} text - * - * @returns {String} - */ - replace(text) { - // This ensures that any html the user puts into the comment field shows as raw html - let replacedText = Str.safeEscape(text); - - this.rules.forEach((rule) => { - replacedText = replacedText.replace(rule.regex, rule.replacement); - }); - - return replacedText; - } -} diff --git a/src/lib/actions/Report.js b/src/lib/actions/Report.js index e27810acc302c..3421adf523b22 100644 --- a/src/lib/actions/Report.js +++ b/src/lib/actions/Report.js @@ -7,7 +7,7 @@ import IONKEYS from '../../IONKEYS'; import CONFIG from '../../CONFIG'; import * as Pusher from '../Pusher/pusher'; import promiseAllSettled from '../promiseAllSettled'; -import ExpensiMark from '../ExpensiMark'; +import {ExpensiMark} from 'js-libs'; import Notification from '../Notification'; import * as PersonalDetails from './PersonalDetails'; import {redirect} from './App'; From 060e4893a5d9112d7eae86277e85155adb65a760 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Wed, 30 Sep 2020 17:33:06 -0700 Subject: [PATCH 16/36] undo a few things --- __tests__/App-test.js | 14 ++ __tests__/ExpensiMark-test.js | 129 ------------------- assets/fonts/GT-America-Exp-Mono-Regular.otf | Bin 60428 -> 0 bytes jest.config.js | 6 - package-lock.json | 4 +- package.json | 5 +- 6 files changed, 20 insertions(+), 138 deletions(-) create mode 100644 __tests__/App-test.js delete mode 100644 __tests__/ExpensiMark-test.js delete mode 100644 assets/fonts/GT-America-Exp-Mono-Regular.otf delete mode 100644 jest.config.js diff --git a/__tests__/App-test.js b/__tests__/App-test.js new file mode 100644 index 0000000000000..35d7eac2c4149 --- /dev/null +++ b/__tests__/App-test.js @@ -0,0 +1,14 @@ +/** + * @format + */ + +import 'react-native'; +import React from 'react'; +import renderer from 'react-test-renderer'; +import App from '../src/App'; + +// Note: test renderer must be required after react-native. + +it('renders correctly', () => { + renderer.create(); +}); diff --git a/__tests__/ExpensiMark-test.js b/__tests__/ExpensiMark-test.js deleted file mode 100644 index 96c7a98dfdadb..0000000000000 --- a/__tests__/ExpensiMark-test.js +++ /dev/null @@ -1,129 +0,0 @@ -/* eslint-disable max-len */ -import {ExpensiMark} from 'js-libs'; - -const parser = new ExpensiMark(); - -// Words wrapped in * successfully replaced with -test('Test bold markdown replacement', () => { - const boldTestStartString = 'This is a *sentence,* and it has some *punctuation, words, and spaces*. ' - + '*test* * testing* test*test*test.'; - const boldTestReplacedString = 'This is a sentence, and it has some punctuation, words, and spaces. ' - + 'test testing test*test*test.'; - - expect(parser.replace(boldTestStartString)).toBe(boldTestReplacedString); -}); - -// Words wrapped in _ successfully replaced with -test('Test italic markdown replacement', () => { - const italicTestStartString = 'This is a _sentence,_ and it has some _punctuation, words, and spaces_. _test_ _ testing_ test_test_test.'; - const italicTestReplacedString = 'This is a sentence, and it has some punctuation, words, and spaces. test testing test_test_test.'; - expect(parser.replace(italicTestStartString)).toBe(italicTestReplacedString); -}); - -// Words wrapped in ~ successfully replaced with -test('Test strikethrough markdown replacement', () => { - const strikethroughTestStartString = 'This is a ~sentence,~ and it has some ~punctuation, words, and spaces~. ~test~ ~ testing~ test~test~test.'; - const strikethroughTestReplacedString = 'This is a sentence, and it has some punctuation, words, and spaces. test testing test~test~test.'; - expect(parser.replace(strikethroughTestStartString)).toBe(strikethroughTestReplacedString); -}); - -// Markdown style links replaced successfully -test('Test markdown style links', () => { - const testString = 'Go to [Expensify](https://www.expensify.com) to learn more.'; - const resultString = 'Go to Expensify to learn more.'; - expect(parser.replace(testString)).toBe(resultString); -}); - -// HTML encoded strings unaffected by parser -test('Test HTML encoded strings', () => { - const rawHTMLTestStartString = 'This is a test. None of

these strings

should display as
HTML
.'; - const rawHTMLTestReplacedString = '<em>This is</em> a <strong>test</strong>. None of <h1>these strings</h1> should display <del>as</del> <div>HTML</div>.'; - expect(parser.replace(rawHTMLTestStartString)).toBe(rawHTMLTestReplacedString); -}); - -// New lines characters \\n were successfully replaced with
-test('Test newline markdown replacement', () => { - const newLineTestStartString = 'This sentence has a newline \n Yep just had one \n Oh there it is another one'; - const newLineReplacedString = 'This sentence has a newline
Yep just had one
Oh there it is another one'; - expect(parser.replace(newLineTestStartString)).toBe(newLineReplacedString); -}); - -// Period replacement test -test('Test period replacements', () => { - const periodTestStartString = 'This test ensures that words with trailing... periods.. are. not converted to links. Also, words seperated.by.periods should...not become..links.'; - expect(parser.replace(periodTestStartString)).toBe(periodTestStartString); -}); - -test('Test code fencing', () => { - const codeFenceExampleMarkdown = '```\nconst javaScript = \'javaScript\'\n```'; - expect(parser.replace(codeFenceExampleMarkdown)).toBe('
const javaScript = 'javaScript'
'); -}); - -test('Test code fencing with spaces and new lines', () => { - const codeFenceExample = '```\nconst javaScript = \'javaScript\'\n const php = \'php\'\n```'; - expect(parser.replace(codeFenceExample)).toBe('
const javaScript = 'javaScript'
    const php = 'php'
'); -}); - -test('Test inline code blocks', () => { - const inlineCodeStartString = 'My favorite language is `JavaScript`. How about you?'; - expect(parser.replace(inlineCodeStartString)).toBe('My favorite language is JavaScript. How about you?'); -}); - -test('Test code fencing with ExpensiMark syntax inside', () => { - const codeFenceExample = '```\nThis is how you can write ~strikethrough~, *bold*, _italics_, and [links](https://www.expensify.com)\n```'; - expect(parser.replace(codeFenceExample)).toBe('
This is how you can write ~strikethrough~, *bold*, _italics_, and [links](https://www.expensify.com)
'); -}); - -test('Test combination replacements', () => { - const urlTestStartString = 'Here is a _combination test_ that sees if ~https://www.example.com~ https://otherexample.com links get rendered first followed by *other markup* or if _*two work together*_ as well. This sentence also has a newline \n Yep just had one.'; - const urlTestReplacedString = '<em>Here</em> is a combination test that <marquee>sees</marquee> if https://www.example.com https://otherexample.com links get rendered first followed by other markup or if two work together as well. This sentence also has a newline
Yep just had one.'; - expect(parser.replace(urlTestStartString)).toBe(urlTestReplacedString); -}); - -test('Test wrapped URLs', () => { - const wrappedUrlTestStartString = '~https://www.example.com~ _http://www.test.com_ *http://www.asdf.com/_test*'; - const wrappedUrlTestReplacedString = 'https://www.example.com http://www.test.com' - + ' http://www.asdf.com/_test'; - expect(parser.replace(wrappedUrlTestStartString)).toBe(wrappedUrlTestReplacedString); -}); - -test('Test url replacements', () => { - const urlTestStartString = 'Testing ' - + 'test.com ' - + 'test again ' - + 'http://test.com/test ' - + 'www.test.com ' - + 'https://www.test.com ' - + 'http://test.com)'; - - const urlTestReplacedString = 'Testing ' - + 'test.com ' - + 'test again ' - + 'http://test.com/test ' - + 'www.test.com ' - + 'https://www.test.com ' - + 'http://test.com)'; - - expect(parser.replace(urlTestStartString)).toBe(urlTestReplacedString); -}); - -test('Test markdown style link with various styles', () => { - const testString = 'Go to ~[Expensify](https://www.expensify.com)~ ' - + '_[Expensify](https://www.expensify.com)_ ' - + '*[Expensify](https://www.expensify.com)* ' - + '[Expensify!](https://www.expensify.com) ' - + '[Expensify?](https://www.expensify.com) ' - + '[Expensify](https://www.expensify-test.com) ' - + '[Expensify](https://www.expensify.com/settings?param={%22section%22:%22account%22})'; - - const resultString = 'Go to Expensify ' - + 'Expensify ' - + 'Expensify ' - + 'Expensify! ' - + 'Expensify? ' - + 'Expensify ' - + 'Expensify'; - - expect(parser.replace(testString)).toBe(resultString); -}); diff --git a/assets/fonts/GT-America-Exp-Mono-Regular.otf b/assets/fonts/GT-America-Exp-Mono-Regular.otf deleted file mode 100644 index 2786ecdc0cf55a1b8839c41a2c66c2d208f5a587..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60428 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 R-5TBa4@0c-YZa_W{{bXNyz2k} diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index 979d4f36f86b1..0000000000000 --- a/jest.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - preset: 'react-native', - transform: { - '^.+\\.js$': require.resolve('react-native/jest/preprocessor.js'), - }, -}; diff --git a/package-lock.json b/package-lock.json index 454b2015a9ec1..5efa6fc47a3b7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10751,8 +10751,8 @@ } }, "js-libs": { - "version": "git+ssh://git@github.com/Expensify/JS-Libs.git#8071f8a21be447024010800c276844999d04b060", - "from": "git+ssh://git@github.com/Expensify/JS-Libs.git#8071f8a21be447024010800c276844999d04b060", + "version": "git+ssh://git@github.com/Expensify/JS-Libs.git#9cf2edc7ecd6c0a08356a22981b675059917daa3", + "from": "git+ssh://git@github.com/Expensify/JS-Libs.git#9cf2edc7ecd6c0a08356a22981b675059917daa3", "requires": { "classnames": "2.2.5", "clipboard": "2.0.4", diff --git a/package.json b/package.json index 9d2527ccad434..f0f779588441d 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "electron-updater": "^4.3.4", "file-loader": "^6.0.0", "html-entities": "^1.3.1", - "js-libs": "git+ssh://git@github.com/Expensify/JS-Libs.git#8071f8a21be447024010800c276844999d04b060", + "js-libs": "git+ssh://git@github.com/Expensify/JS-Libs.git#9cf2edc7ecd6c0a08356a22981b675059917daa3", "lodash.get": "^4.4.2", "lodash.has": "^4.5.2", "lodash.orderby": "^4.6.0", @@ -89,5 +89,8 @@ "webpack-cli": "^3.3.12", "webpack-dev-server": "^3.11.0", "webpack-merge": "^5.1.1" + }, + "jest": { + "preset": "react-native" } } From 3126f704dd39c98c82fa24c8103fef80904e8bf0 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Wed, 30 Sep 2020 17:36:00 -0700 Subject: [PATCH 17/36] fix plist --- ios/ReactNativeChat.xcodeproj/project.pbxproj | 2 -- ios/ReactNativeChat/Info.plist | 1 - 2 files changed, 3 deletions(-) diff --git a/ios/ReactNativeChat.xcodeproj/project.pbxproj b/ios/ReactNativeChat.xcodeproj/project.pbxproj index 502073084edfd..78c9ed4d09996 100644 --- a/ios/ReactNativeChat.xcodeproj/project.pbxproj +++ b/ios/ReactNativeChat.xcodeproj/project.pbxproj @@ -56,7 +56,6 @@ BA6C613DE6755E40F7EDDC68 /* Pods-ReactNativeChat-ReactNativeChatTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeChat-ReactNativeChatTests.debug.xcconfig"; path = "Target Support Files/Pods-ReactNativeChat-ReactNativeChatTests/Pods-ReactNativeChat-ReactNativeChatTests.debug.xcconfig"; sourceTree = ""; }; C4F81DB9C6DA6418525441E5 /* libPods-ReactNativeChat-ReactNativeChatTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ReactNativeChat-ReactNativeChatTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; C6C1D4F5C262ACDAF1800CAD /* Pods-ReactNativeChat.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeChat.release.xcconfig"; path = "Target Support Files/Pods-ReactNativeChat/Pods-ReactNativeChat.release.xcconfig"; sourceTree = ""; }; - C7D0D4F57818445CAA756893 /* GT-America-Exp-Mono-Regular.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "GT-America-Exp-Mono-Regular.otf"; path = "../assets/fonts/GT-America-Exp-Mono-Regular.otf"; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; }; /* End PBXFileReference section */ @@ -163,7 +162,6 @@ AE65058949E14DA5A2D5435D /* GTAmericaExp-Medium.otf */, 8C7003903C1E4957824899BB /* GTAmericaExp-Regular.otf */, A292718541C841859D97DF2F /* GTAmericaExp-Thin.otf */, - C7D0D4F57818445CAA756893 /* GT-America-Exp-Mono-Regular.otf */, 8437A5A38F2047E0BCCD7C2F /* GTAmericaExpMono-Rg.otf */, ); name = Resources; diff --git a/ios/ReactNativeChat/Info.plist b/ios/ReactNativeChat/Info.plist index 3087bc53c6b01..538533409396e 100644 --- a/ios/ReactNativeChat/Info.plist +++ b/ios/ReactNativeChat/Info.plist @@ -63,7 +63,6 @@ GTAmericaExp-Medium.otf GTAmericaExp-Regular.otf GTAmericaExp-Thin.otf - GT-America-Exp-Mono-Regular.otf GTAmericaExpMono-Rg.otf UILaunchStoryboardName From 8c8169cf236d0bddcff2f1e200a1006a1fcdc41a Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Wed, 30 Sep 2020 19:19:44 -0700 Subject: [PATCH 18/36] try this again --- package-lock.json | 4 ++-- package.json | 2 +- src/lib/actions/Report.js | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5efa6fc47a3b7..5928b176d2d5e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10751,8 +10751,8 @@ } }, "js-libs": { - "version": "git+ssh://git@github.com/Expensify/JS-Libs.git#9cf2edc7ecd6c0a08356a22981b675059917daa3", - "from": "git+ssh://git@github.com/Expensify/JS-Libs.git#9cf2edc7ecd6c0a08356a22981b675059917daa3", + "version": "git+ssh://git@github.com/Expensify/JS-Libs.git#c13a308ada46811ca5fff9566ca15f9f5ea44084", + "from": "git+ssh://git@github.com/Expensify/JS-Libs.git#c13a308ada46811ca5fff9566ca15f9f5ea44084", "requires": { "classnames": "2.2.5", "clipboard": "2.0.4", diff --git a/package.json b/package.json index f0f779588441d..75fedae815777 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "electron-updater": "^4.3.4", "file-loader": "^6.0.0", "html-entities": "^1.3.1", - "js-libs": "git+ssh://git@github.com/Expensify/JS-Libs.git#9cf2edc7ecd6c0a08356a22981b675059917daa3", + "js-libs": "git+ssh://git@github.com/Expensify/JS-Libs.git#c13a308ada46811ca5fff9566ca15f9f5ea44084", "lodash.get": "^4.4.2", "lodash.has": "^4.5.2", "lodash.orderby": "^4.6.0", diff --git a/src/lib/actions/Report.js b/src/lib/actions/Report.js index 3421adf523b22..9b3ab431a4eee 100644 --- a/src/lib/actions/Report.js +++ b/src/lib/actions/Report.js @@ -1,13 +1,13 @@ import moment from 'moment'; import _ from 'underscore'; import lodashGet from 'lodash.get'; +import ExpensiMark from 'js-libs/lib/ExpensiMark'; import Ion from '../Ion'; import * as API from '../API'; import IONKEYS from '../../IONKEYS'; import CONFIG from '../../CONFIG'; import * as Pusher from '../Pusher/pusher'; import promiseAllSettled from '../promiseAllSettled'; -import {ExpensiMark} from 'js-libs'; import Notification from '../Notification'; import * as PersonalDetails from './PersonalDetails'; import {redirect} from './App'; From 1897ca64a623124bc1fcc7a90c92186af0b9f23f Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Wed, 30 Sep 2020 20:07:02 -0700 Subject: [PATCH 19/36] bump js-libs --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5928b176d2d5e..55c1c0e7eff03 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10751,8 +10751,8 @@ } }, "js-libs": { - "version": "git+ssh://git@github.com/Expensify/JS-Libs.git#c13a308ada46811ca5fff9566ca15f9f5ea44084", - "from": "git+ssh://git@github.com/Expensify/JS-Libs.git#c13a308ada46811ca5fff9566ca15f9f5ea44084", + "version": "git+ssh://git@github.com/Expensify/JS-Libs.git#e28ac12f268ed256fb80b1830e3ccf7835177c64", + "from": "git+ssh://git@github.com/Expensify/JS-Libs.git#e28ac12f268ed256fb80b1830e3ccf7835177c64", "requires": { "classnames": "2.2.5", "clipboard": "2.0.4", diff --git a/package.json b/package.json index 75fedae815777..a3512229b5f8e 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "electron-updater": "^4.3.4", "file-loader": "^6.0.0", "html-entities": "^1.3.1", - "js-libs": "git+ssh://git@github.com/Expensify/JS-Libs.git#c13a308ada46811ca5fff9566ca15f9f5ea44084", + "js-libs": "git+ssh://git@github.com/Expensify/JS-Libs.git#e28ac12f268ed256fb80b1830e3ccf7835177c64", "lodash.get": "^4.4.2", "lodash.has": "^4.5.2", "lodash.orderby": "^4.6.0", From fa94c8b6e537b039795b665815f94198d916a7e9 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Thu, 1 Oct 2020 16:34:59 -0700 Subject: [PATCH 20/36] try editing yml web script --- .github/workflows/web.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/web.yml b/.github/workflows/web.yml index 82df9402ff59e..4b178ee746d21 100644 --- a/.github/workflows/web.yml +++ b/.github/workflows/web.yml @@ -37,6 +37,10 @@ jobs: aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1 + - uses: webfactory/ssh-agent@v0.2.0 + with: + ssh-private-key: ${{ secrets.BOTIFY_TOKEN }} + # Install node modules - name: Install dependenices run: npm install From 256c9164bea731b7882d771ffb4b9c53ea7da5bb Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Thu, 1 Oct 2020 17:02:05 -0700 Subject: [PATCH 21/36] Revert "try editing yml web script" This reverts commit fa94c8b6e537b039795b665815f94198d916a7e9. --- .github/workflows/web.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/web.yml b/.github/workflows/web.yml index 4b178ee746d21..82df9402ff59e 100644 --- a/.github/workflows/web.yml +++ b/.github/workflows/web.yml @@ -37,10 +37,6 @@ jobs: aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1 - - uses: webfactory/ssh-agent@v0.2.0 - with: - ssh-private-key: ${{ secrets.BOTIFY_TOKEN }} - # Install node modules - name: Install dependenices run: npm install From c8d8639cbd1dac88aedcc7597ffb0831ed1ed292 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Thu, 1 Oct 2020 17:02:33 -0700 Subject: [PATCH 22/36] try this --- .github/workflows/web.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/web.yml b/.github/workflows/web.yml index 82df9402ff59e..4b178ee746d21 100644 --- a/.github/workflows/web.yml +++ b/.github/workflows/web.yml @@ -37,6 +37,10 @@ jobs: aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1 + - uses: webfactory/ssh-agent@v0.2.0 + with: + ssh-private-key: ${{ secrets.BOTIFY_TOKEN }} + # Install node modules - name: Install dependenices run: npm install From 3ebeebb8b40426f1649a124d88fc11f8fd462c2f Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Thu, 1 Oct 2020 17:25:50 -0700 Subject: [PATCH 23/36] add to the lint script maybe? --- .github/workflows/lint.yml | 3 +++ .github/workflows/web.yml | 4 ---- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 58924dc6f1bde..4a4ae63619cf2 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -16,6 +16,9 @@ jobs: - uses: actions/checkout@v2 - name: Use Node.js uses: actions/setup-node@v1 + - uses: webfactory/ssh-agent@v0.2.0 + with: + ssh-private-key: ${{ secrets.BOTIFY_TOKEN }} - run: npm install - run: npm run lint env: diff --git a/.github/workflows/web.yml b/.github/workflows/web.yml index 4b178ee746d21..82df9402ff59e 100644 --- a/.github/workflows/web.yml +++ b/.github/workflows/web.yml @@ -37,10 +37,6 @@ jobs: aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1 - - uses: webfactory/ssh-agent@v0.2.0 - with: - ssh-private-key: ${{ secrets.BOTIFY_TOKEN }} - # Install node modules - name: Install dependenices run: npm install From 2435f8b75edc2bd5acea505fd84ad36af6de9b0d Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Thu, 1 Oct 2020 17:32:03 -0700 Subject: [PATCH 24/36] remove platform code --- src/components/InlineCodeBlock/index.ios.js | 4 ++-- src/style/StyleSheet.js | 10 ++++++---- src/style/fontFamily/index.js | 4 +++- src/style/fontFamily/monospace/index.js | 1 + src/style/fontFamily/monospace/index.native.js | 1 + 5 files changed, 13 insertions(+), 7 deletions(-) create mode 100644 src/style/fontFamily/monospace/index.js create mode 100644 src/style/fontFamily/monospace/index.native.js diff --git a/src/components/InlineCodeBlock/index.ios.js b/src/components/InlineCodeBlock/index.ios.js index 0691fa7cdf213..eb08551a40aea 100644 --- a/src/components/InlineCodeBlock/index.ios.js +++ b/src/components/InlineCodeBlock/index.ios.js @@ -1,9 +1,9 @@ import React from 'react'; import {View} from 'react-native'; -import {webViewStyles} from '../../style/StyleSheet'; +import {webViewStyles, styles} from '../../style/StyleSheet'; export default ({children}) => ( - + {children} ); diff --git a/src/style/StyleSheet.js b/src/style/StyleSheet.js index 9952d94267708..54b6e494574a1 100644 --- a/src/style/StyleSheet.js +++ b/src/style/StyleSheet.js @@ -1,5 +1,4 @@ // We place items a percentage to the safe area on the top or bottom of the screen -import {Platform} from 'react-native'; import fontFamily from './fontFamily'; const safeInsertPercentage = 0.7; @@ -59,6 +58,10 @@ const styles = { marginBottom: 16, }, + mbn5: { + marginBottom: -5. + }, + p1: { padding: 10, }, @@ -660,7 +663,6 @@ const styles = { }, }; -const monospaceFont = Platform.OS === 'web' ? 'monospace' : fontFamily.GTA_MONO; const baseCodeTagStyles = { borderWidth: 1, borderRadius: 5, @@ -703,11 +705,11 @@ const webViewStyles = { }, pre: { - fontFamily: monospaceFont, + fontFamily: fontFamily.MONOSPACE, }, code: { - fontFamily: monospaceFont, + fontFamily: fontFamily.MONOSPACE, }, img: { diff --git a/src/style/fontFamily/index.js b/src/style/fontFamily/index.js index d51bc85b81306..9f91a7786a2ad 100644 --- a/src/style/fontFamily/index.js +++ b/src/style/fontFamily/index.js @@ -1,6 +1,8 @@ +import monospace from './monospace'; + const fontFamily = { GTA: 'GTAmericaExp-Regular', - GTA_MONO: 'GTAmericaExpMono-Rg', + MONOSPACE: monospace, SYSTEM: 'System', }; diff --git a/src/style/fontFamily/monospace/index.js b/src/style/fontFamily/monospace/index.js new file mode 100644 index 0000000000000..03b97daf04c05 --- /dev/null +++ b/src/style/fontFamily/monospace/index.js @@ -0,0 +1 @@ +export default 'monospace'; \ No newline at end of file diff --git a/src/style/fontFamily/monospace/index.native.js b/src/style/fontFamily/monospace/index.native.js new file mode 100644 index 0000000000000..be90e9edf0487 --- /dev/null +++ b/src/style/fontFamily/monospace/index.native.js @@ -0,0 +1 @@ +export default 'GTAmericaExpMono-Rg'; \ No newline at end of file From 1b9e27871bbfa76607a2aa2cc82cfb9034abeabf Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Thu, 1 Oct 2020 17:43:29 -0700 Subject: [PATCH 25/36] try this maybe --- .github/workflows/lint.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 4a4ae63619cf2..12eee4e32812b 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -14,11 +14,10 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 + with: + persist-credentials: false - name: Use Node.js uses: actions/setup-node@v1 - - uses: webfactory/ssh-agent@v0.2.0 - with: - ssh-private-key: ${{ secrets.BOTIFY_TOKEN }} - run: npm install - run: npm run lint env: From 21ee1069ab95d81abae07665d77b68703843ba0d Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Thu, 1 Oct 2020 17:52:14 -0700 Subject: [PATCH 26/36] ... --- .github/workflows/lint.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 12eee4e32812b..58924dc6f1bde 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -14,8 +14,6 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - with: - persist-credentials: false - name: Use Node.js uses: actions/setup-node@v1 - run: npm install From a41307b1c8c96cc2d9e55099b1b3b768a9b6c3cc Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Thu, 1 Oct 2020 18:02:45 -0700 Subject: [PATCH 27/36] stop using ssh to see if that works --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 55c1c0e7eff03..c6f338e761c5d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10751,8 +10751,8 @@ } }, "js-libs": { - "version": "git+ssh://git@github.com/Expensify/JS-Libs.git#e28ac12f268ed256fb80b1830e3ccf7835177c64", - "from": "git+ssh://git@github.com/Expensify/JS-Libs.git#e28ac12f268ed256fb80b1830e3ccf7835177c64", + "version": "github:Expensify/JS-Libs#e28ac12f268ed256fb80b1830e3ccf7835177c64", + "from": "github:Expensify/JS-Libs#e28ac12f268ed256fb80b1830e3ccf7835177c64", "requires": { "classnames": "2.2.5", "clipboard": "2.0.4", diff --git a/package.json b/package.json index a3512229b5f8e..5ec0a1405de8f 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "electron-updater": "^4.3.4", "file-loader": "^6.0.0", "html-entities": "^1.3.1", - "js-libs": "git+ssh://git@github.com/Expensify/JS-Libs.git#e28ac12f268ed256fb80b1830e3ccf7835177c64", + "js-libs": "Expensify/JS-Libs#e28ac12f268ed256fb80b1830e3ccf7835177c64", "lodash.get": "^4.4.2", "lodash.has": "^4.5.2", "lodash.orderby": "^4.6.0", From 1dee5b38c311007a7c02a40105880429fa12f62c Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Thu, 1 Oct 2020 18:08:54 -0700 Subject: [PATCH 28/36] try this --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index c6f338e761c5d..55c1c0e7eff03 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10751,8 +10751,8 @@ } }, "js-libs": { - "version": "github:Expensify/JS-Libs#e28ac12f268ed256fb80b1830e3ccf7835177c64", - "from": "github:Expensify/JS-Libs#e28ac12f268ed256fb80b1830e3ccf7835177c64", + "version": "git+ssh://git@github.com/Expensify/JS-Libs.git#e28ac12f268ed256fb80b1830e3ccf7835177c64", + "from": "git+ssh://git@github.com/Expensify/JS-Libs.git#e28ac12f268ed256fb80b1830e3ccf7835177c64", "requires": { "classnames": "2.2.5", "clipboard": "2.0.4", diff --git a/package.json b/package.json index 5ec0a1405de8f..1cd6e74ce2a7d 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "electron-updater": "^4.3.4", "file-loader": "^6.0.0", "html-entities": "^1.3.1", - "js-libs": "Expensify/JS-Libs#e28ac12f268ed256fb80b1830e3ccf7835177c64", + "js-libs": "git+https://git@github.com:Expensify/JS-Libs.git#e28ac12f268ed256fb80b1830e3ccf7835177c64", "lodash.get": "^4.4.2", "lodash.has": "^4.5.2", "lodash.orderby": "^4.6.0", From 2cbc682b3a89ed6493a2477c1063ef48935c95aa Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Thu, 1 Oct 2020 18:12:49 -0700 Subject: [PATCH 29/36] hmm --- .github/workflows/lint.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 58924dc6f1bde..d3c970c6ed8be 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -16,6 +16,9 @@ jobs: - uses: actions/checkout@v2 - name: Use Node.js uses: actions/setup-node@v1 + - uses: webfactory/ssh-agent@v0.4.0 + with: + ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} - run: npm install - run: npm run lint env: From 8e5d4f0fa23bb29b13ea3967fbff765366700dbe Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Fri, 2 Oct 2020 18:21:24 -0700 Subject: [PATCH 30/36] fix conflicts --- ios/ReactNativeChat.xcodeproj/project.pbxproj | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/ios/ReactNativeChat.xcodeproj/project.pbxproj b/ios/ReactNativeChat.xcodeproj/project.pbxproj index fbdb6dad0b58b..635754ba7c490 100644 --- a/ios/ReactNativeChat.xcodeproj/project.pbxproj +++ b/ios/ReactNativeChat.xcodeproj/project.pbxproj @@ -168,13 +168,10 @@ AE65058949E14DA5A2D5435D /* GTAmericaExp-Medium.otf */, 8C7003903C1E4957824899BB /* GTAmericaExp-Regular.otf */, A292718541C841859D97DF2F /* GTAmericaExp-Thin.otf */, -<<<<<<< HEAD 8437A5A38F2047E0BCCD7C2F /* GTAmericaExpMono-Rg.otf */, -======= A8D6F2F722FD4E66A38EBBB6 /* GTAmericaExp-BdIt.otf */, DB5A1365442D4419AF6F08E5 /* GTAmericaExp-MdIt.otf */, 918D7FEFF96242E6B5F5E14D /* GTAmericaExp-RgIt.otf */, ->>>>>>> origin ); name = Resources; sourceTree = ""; @@ -287,14 +284,7 @@ files = ( 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */, 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, -<<<<<<< HEAD - 11FA3546D54246CD8F819152 /* GTAmericaExp-Bold.otf in Resources */, - 49F157C845CE4D56AA72B80E /* GTAmericaExp-Light.otf in Resources */, - CC07911F22C2437DA6708BD2 /* GTAmericaExp-Medium.otf in Resources */, - 4912B60FA66C4604A56AD575 /* GTAmericaExp-Regular.otf in Resources */, - 7F7721B764D444D6861A9B39 /* GTAmericaExp-Thin.otf in Resources */, 12DD1878FCB9487C9F031C86 /* GTAmericaExpMono-Rg.otf in Resources */, -======= 1E76D5212522316A005A268F /* GTAmericaExp-Bold.otf in Resources */, 1E76D5222522316A005A268F /* GTAmericaExp-Light.otf in Resources */, 1E76D5232522316A005A268F /* GTAmericaExp-Medium.otf in Resources */, @@ -303,7 +293,6 @@ 425866037F4C482AAB46CB8B /* GTAmericaExp-BdIt.otf in Resources */, 6856B78873B64C44A92E51DB /* GTAmericaExp-MdIt.otf in Resources */, 8821A238A081483FA947BC4E /* GTAmericaExp-RgIt.otf in Resources */, ->>>>>>> origin ); runOnlyForDeploymentPostprocessing = 0; }; From 9a118ede0c9f29a51b709aaba81aef997afef29b Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Fri, 2 Oct 2020 18:29:30 -0700 Subject: [PATCH 31/36] fix style --- src/components/InlineCodeBlock/index.ios.js | 2 +- src/style/StyleSheet.js | 2 +- src/style/fontFamily/monospace/index.js | 2 +- src/style/fontFamily/monospace/index.native.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/InlineCodeBlock/index.ios.js b/src/components/InlineCodeBlock/index.ios.js index eb08551a40aea..08243cbdfc96a 100644 --- a/src/components/InlineCodeBlock/index.ios.js +++ b/src/components/InlineCodeBlock/index.ios.js @@ -1,6 +1,6 @@ import React from 'react'; import {View} from 'react-native'; -import {webViewStyles, styles} from '../../style/StyleSheet'; +import styles, {webViewStyles} from '../../style/StyleSheet'; export default ({children}) => ( diff --git a/src/style/StyleSheet.js b/src/style/StyleSheet.js index 1f30a39ad5e18..9e00fd1d20cfb 100644 --- a/src/style/StyleSheet.js +++ b/src/style/StyleSheet.js @@ -60,7 +60,7 @@ const styles = { }, mbn5: { - marginBottom: -5. + marginBottom: -5, }, p1: { diff --git a/src/style/fontFamily/monospace/index.js b/src/style/fontFamily/monospace/index.js index 03b97daf04c05..35857bdc10f08 100644 --- a/src/style/fontFamily/monospace/index.js +++ b/src/style/fontFamily/monospace/index.js @@ -1 +1 @@ -export default 'monospace'; \ No newline at end of file +export default 'monospace'; diff --git a/src/style/fontFamily/monospace/index.native.js b/src/style/fontFamily/monospace/index.native.js index be90e9edf0487..585fc26db20ca 100644 --- a/src/style/fontFamily/monospace/index.native.js +++ b/src/style/fontFamily/monospace/index.native.js @@ -1 +1 @@ -export default 'GTAmericaExpMono-Rg'; \ No newline at end of file +export default 'GTAmericaExpMono-Rg'; From 350756030921c25e90fe80ac364b7ce636500e19 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Mon, 5 Oct 2020 15:39:38 -0700 Subject: [PATCH 32/36] update to use merge commit --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index acd43daccbdcf..6e36126b0246b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10751,8 +10751,8 @@ } }, "js-libs": { - "version": "git+ssh://git@github.com/Expensify/JS-Libs.git#e28ac12f268ed256fb80b1830e3ccf7835177c64", - "from": "git+ssh://git@github.com/Expensify/JS-Libs.git#e28ac12f268ed256fb80b1830e3ccf7835177c64", + "version": "git+ssh://git@github.com/Expensify/JS-Libs.git#c2a2bb1b0b725b9b0681e71cb99123f9e711ec20", + "from": "git+ssh://git@github.com/Expensify/JS-Libs.git#c2a2bb1b0b725b9b0681e71cb99123f9e711ec20", "requires": { "classnames": "2.2.5", "clipboard": "2.0.4", diff --git a/package.json b/package.json index 956bf0a729a45..86fa796df84ff 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "electron-updater": "^4.3.4", "file-loader": "^6.0.0", "html-entities": "^1.3.1", - "js-libs": "git+https://git@github.com:Expensify/JS-Libs.git#e28ac12f268ed256fb80b1830e3ccf7835177c64", + "js-libs": "git+https://git@github.com:Expensify/JS-Libs.git#c2a2bb1b0b725b9b0681e71cb99123f9e711ec20", "lodash.get": "^4.4.2", "lodash.has": "^4.5.2", "lodash.orderby": "^4.6.0", From f723ad506d86daca583337f9418f34723df8f2ae Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Mon, 5 Oct 2020 15:48:16 -0700 Subject: [PATCH 33/36] yml indentation is real --- .github/workflows/lint.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 2f99ca1f9db2f..9990e0cf0082d 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -24,12 +24,12 @@ jobs: - name: Setup Node uses: actions/setup-node@v1 - with: - node-version: '14.x' + with: + node-version: '14.x' - uses: webfactory/ssh-agent@v0.4.0 with: - ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} + ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} - run: npm install From e2ee55df2316acca53c59b4b312002b86eb985e0 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Mon, 5 Oct 2020 15:51:16 -0700 Subject: [PATCH 34/36] use the ssh key for all node_modules installs --- .github/workflows/android.yml | 4 ++++ .github/workflows/desktop.yml | 4 ++++ .github/workflows/ios.yml | 4 ++++ .github/workflows/version.yml | 4 ++++ .github/workflows/web.yml | 4 ++++ 5 files changed, 20 insertions(+) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 7de697ad094e5..92c6c17525d62 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -20,6 +20,10 @@ jobs: - name: Install gems run: bundle install + - uses: webfactory/ssh-agent@v0.4.0 + with: + ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} + - name: Install node packages run: npm install diff --git a/.github/workflows/desktop.yml b/.github/workflows/desktop.yml index 64035595cc590..03cd2677cd8c7 100644 --- a/.github/workflows/desktop.yml +++ b/.github/workflows/desktop.yml @@ -17,6 +17,10 @@ jobs: with: node-version: '14.x' + - uses: webfactory/ssh-agent@v0.4.0 + with: + ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} + - name: Install node packages run: npm install diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index 764614cb5def4..1299c31a95747 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -20,6 +20,10 @@ jobs: - name: Install gems run: bundle install + - uses: webfactory/ssh-agent@v0.4.0 + with: + ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} + - name: Install node packages run: npm install diff --git a/.github/workflows/version.yml b/.github/workflows/version.yml index 08c69c61d445c..c6981b557c089 100644 --- a/.github/workflows/version.yml +++ b/.github/workflows/version.yml @@ -19,6 +19,10 @@ jobs: with: node-version: '14.x' + - uses: webfactory/ssh-agent@v0.4.0 + with: + ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} + - name: Install dependenices run: npm install diff --git a/.github/workflows/web.yml b/.github/workflows/web.yml index 745cf5374d83e..f7cb2cb39a9db 100644 --- a/.github/workflows/web.yml +++ b/.github/workflows/web.yml @@ -38,6 +38,10 @@ jobs: aws-region: us-east-1 # Install node modules + - uses: webfactory/ssh-agent@v0.4.0 + with: + ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} + - name: Install dependenices run: npm install From 9a2841b9287c0bf6efc62d3ace1a912b66342b3e Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Tue, 6 Oct 2020 09:43:11 -0700 Subject: [PATCH 35/36] add propTypes --- src/components/InlineCodeBlock/index.android.js | 14 +++++++++++++- src/components/InlineCodeBlock/index.ios.js | 14 +++++++++++++- src/components/InlineCodeBlock/index.js | 14 +++++++++++++- 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/src/components/InlineCodeBlock/index.android.js b/src/components/InlineCodeBlock/index.android.js index 69af16cf71938..33ae1fffd89bd 100644 --- a/src/components/InlineCodeBlock/index.android.js +++ b/src/components/InlineCodeBlock/index.android.js @@ -1,9 +1,21 @@ import React from 'react'; +import PropTypes from 'prop-types'; import {View} from 'react-native'; import {webViewStyles} from '../../style/StyleSheet'; -export default ({children}) => ( +const propTypes = { + children: PropTypes.oneOfType([ + PropTypes.arrayOf(PropTypes.node), + PropTypes.node + ]).isRequired +}; + +const InlineCodeBlock = ({children}) => ( {children} ); + +InlineCodeBlock.propTypes = propTypes; +InlineCodeBlock.displayName = 'InlineCodeBlock'; +export default InlineCodeBlock; diff --git a/src/components/InlineCodeBlock/index.ios.js b/src/components/InlineCodeBlock/index.ios.js index 08243cbdfc96a..5b0ea0b909842 100644 --- a/src/components/InlineCodeBlock/index.ios.js +++ b/src/components/InlineCodeBlock/index.ios.js @@ -1,9 +1,21 @@ import React from 'react'; +import PropTypes from 'prop-types'; import {View} from 'react-native'; import styles, {webViewStyles} from '../../style/StyleSheet'; -export default ({children}) => ( +const propTypes = { + children: PropTypes.oneOfType([ + PropTypes.arrayOf(PropTypes.node), + PropTypes.node + ]).isRequired +}; + +const InlineCodeBlock = ({children}) => ( {children} ); + +InlineCodeBlock.propTypes = propTypes; +InlineCodeBlock.displayName = 'InlineCodeBlock'; +export default InlineCodeBlock; diff --git a/src/components/InlineCodeBlock/index.js b/src/components/InlineCodeBlock/index.js index 12cb4e669952a..10de56f9e87fd 100644 --- a/src/components/InlineCodeBlock/index.js +++ b/src/components/InlineCodeBlock/index.js @@ -1,9 +1,21 @@ import React from 'react'; +import PropTypes from 'prop-types'; import {Text} from 'react-native'; import {webViewStyles} from '../../style/StyleSheet'; -export default ({children}) => ( +const propTypes = { + children: PropTypes.oneOfType([ + PropTypes.arrayOf(PropTypes.node), + PropTypes.node + ]).isRequired +}; + +const InlineCodeBlock = ({children}) => ( {children} ); + +InlineCodeBlock.propTypes = propTypes; +InlineCodeBlock.displayName = 'InlineCodeBlock'; +export default InlineCodeBlock; From 5876cfc7e5a4b013f3c3837ee594cf073535efc7 Mon Sep 17 00:00:00 2001 From: Marc Glasser Date: Tue, 6 Oct 2020 10:39:07 -0700 Subject: [PATCH 36/36] just use node --- src/components/InlineCodeBlock/index.android.js | 5 +---- src/components/InlineCodeBlock/index.ios.js | 5 +---- src/components/InlineCodeBlock/index.js | 5 +---- 3 files changed, 3 insertions(+), 12 deletions(-) diff --git a/src/components/InlineCodeBlock/index.android.js b/src/components/InlineCodeBlock/index.android.js index 33ae1fffd89bd..d081fbd2eeee3 100644 --- a/src/components/InlineCodeBlock/index.android.js +++ b/src/components/InlineCodeBlock/index.android.js @@ -4,10 +4,7 @@ import {View} from 'react-native'; import {webViewStyles} from '../../style/StyleSheet'; const propTypes = { - children: PropTypes.oneOfType([ - PropTypes.arrayOf(PropTypes.node), - PropTypes.node - ]).isRequired + children: PropTypes.node.isRequired, }; const InlineCodeBlock = ({children}) => ( diff --git a/src/components/InlineCodeBlock/index.ios.js b/src/components/InlineCodeBlock/index.ios.js index 5b0ea0b909842..3887a5e23ab4e 100644 --- a/src/components/InlineCodeBlock/index.ios.js +++ b/src/components/InlineCodeBlock/index.ios.js @@ -4,10 +4,7 @@ import {View} from 'react-native'; import styles, {webViewStyles} from '../../style/StyleSheet'; const propTypes = { - children: PropTypes.oneOfType([ - PropTypes.arrayOf(PropTypes.node), - PropTypes.node - ]).isRequired + children: PropTypes.node.isRequired, }; const InlineCodeBlock = ({children}) => ( diff --git a/src/components/InlineCodeBlock/index.js b/src/components/InlineCodeBlock/index.js index 10de56f9e87fd..85f1208bd0a9c 100644 --- a/src/components/InlineCodeBlock/index.js +++ b/src/components/InlineCodeBlock/index.js @@ -4,10 +4,7 @@ import {Text} from 'react-native'; import {webViewStyles} from '../../style/StyleSheet'; const propTypes = { - children: PropTypes.oneOfType([ - PropTypes.arrayOf(PropTypes.node), - PropTypes.node - ]).isRequired + children: PropTypes.node.isRequired, }; const InlineCodeBlock = ({children}) => (