Compare commits
119 Commits
server-v2.
...
jcgurango-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f0f33b7349 | ||
|
|
1c5bb8f195 | ||
|
|
e278a26dc8 | ||
|
|
2eac0078cd | ||
|
|
3fa6ce4583 | ||
|
|
7d218ca5b2 | ||
|
|
721a37a377 | ||
|
|
5600c498d8 | ||
|
|
8eba798cdd | ||
|
|
0c76b731e7 | ||
|
|
2289e3297a | ||
|
|
51fbb38f66 | ||
|
|
86aaa7f478 | ||
|
|
c5c9d3a2ef | ||
|
|
1118fef164 | ||
|
|
e0ea76c9f1 | ||
|
|
2aab85f073 | ||
|
|
dfbe628944 | ||
|
|
bc35649dda | ||
|
|
09c6c81992 | ||
|
|
cf98f6a450 | ||
|
|
9e56bc72a3 | ||
|
|
85b9fe06e4 | ||
|
|
e91e38c4e6 | ||
|
|
fbf2fef17c | ||
|
|
3080575a17 | ||
|
|
10b9df7b9f | ||
|
|
dd6eec6a03 | ||
|
|
48ef6db4a5 | ||
|
|
7591a1182e | ||
|
|
0c4ba592f6 | ||
|
|
c6a15b3186 | ||
|
|
e89b59be8e | ||
|
|
315f071337 | ||
|
|
667bb19765 | ||
|
|
21d09e44c4 | ||
|
|
d36c3069c3 | ||
|
|
ab0747693d | ||
|
|
e322699829 | ||
|
|
220803d478 | ||
|
|
78d558f72e | ||
|
|
3c7dc9f11c | ||
|
|
a8a8452d21 | ||
|
|
9f5924984c | ||
|
|
6db5723a50 | ||
|
|
1d0bcc435b | ||
|
|
700158d83c | ||
|
|
df4e8c9f47 | ||
|
|
ce6baccd82 | ||
|
|
0caf1fdd7b | ||
|
|
adf1c5496e | ||
|
|
51b294e66b | ||
|
|
893accf59c | ||
|
|
2a10cd3333 | ||
|
|
3ec257abc3 | ||
|
|
295756a528 | ||
|
|
5603900fc2 | ||
|
|
e1195f7370 | ||
|
|
5625b15cb5 | ||
|
|
af4147ed58 | ||
|
|
9e10261e0b | ||
|
|
487fecb16e | ||
|
|
e0ce301c3f | ||
|
|
bb474287e5 | ||
|
|
583ae0385b | ||
|
|
35a4eef87b | ||
|
|
e46ecdcb2b | ||
|
|
6036420bc6 | ||
|
|
cd73661200 | ||
|
|
5dbadbbff6 | ||
|
|
2dc02fe0f2 | ||
|
|
a474b403f9 | ||
|
|
e9a8475ecf | ||
|
|
0f9bdf1ca0 | ||
|
|
a7781f2a6b | ||
|
|
71144bb675 | ||
|
|
6886f6fd39 | ||
|
|
83610c01c0 | ||
|
|
5b18edc8be | ||
|
|
671fa542b4 | ||
|
|
4e4685b039 | ||
|
|
e4023a349f | ||
|
|
e7c37d17c1 | ||
|
|
d6c2b64a43 | ||
|
|
10e49d8cd3 | ||
|
|
95d83a8ced | ||
|
|
6b00c4e6ce | ||
|
|
dc2def403c | ||
|
|
89e2603f02 | ||
|
|
35e03e2ad9 | ||
|
|
12e853b871 | ||
|
|
5841596acb | ||
|
|
377e35b1af | ||
|
|
a3181d4458 | ||
|
|
e057c7beea | ||
|
|
60c25f88cf | ||
|
|
844f868aaa | ||
|
|
4ec8666368 | ||
|
|
ec5ead7b6f | ||
|
|
2f7f306399 | ||
|
|
4d6bbfa901 | ||
|
|
8e9d1dab2a | ||
|
|
fd733f9079 | ||
|
|
79cacc4d5a | ||
|
|
2c91af21e2 | ||
|
|
4c0eff38ff | ||
|
|
e49d9ebbf0 | ||
|
|
f73eee0d69 | ||
|
|
d5fc645fe6 | ||
|
|
0eded263b3 | ||
|
|
a0c923fab3 | ||
|
|
1e352ec0b1 | ||
|
|
9bf7864142 | ||
|
|
9e587c1b06 | ||
|
|
66755c5386 | ||
|
|
042a8e5d30 | ||
|
|
faade53cf9 | ||
|
|
8f526474ea | ||
|
|
3547211078 |
@@ -357,6 +357,7 @@ packages/app-desktop/services/sortOrder/PerFolderSortOrderService.test.js
|
|||||||
packages/app-desktop/services/sortOrder/notesSortOrderUtils.js
|
packages/app-desktop/services/sortOrder/notesSortOrderUtils.js
|
||||||
packages/app-desktop/services/sortOrder/notesSortOrderUtils.test.js
|
packages/app-desktop/services/sortOrder/notesSortOrderUtils.test.js
|
||||||
packages/app-desktop/services/spellChecker/SpellCheckerServiceDriverNative.js
|
packages/app-desktop/services/spellChecker/SpellCheckerServiceDriverNative.js
|
||||||
|
packages/app-desktop/tools/notarizeMacApp.js
|
||||||
packages/app-desktop/utils/markupLanguageUtils.js
|
packages/app-desktop/utils/markupLanguageUtils.js
|
||||||
packages/app-mobile/PluginAssetsLoader.js
|
packages/app-mobile/PluginAssetsLoader.js
|
||||||
packages/app-mobile/components/ActionButton.js
|
packages/app-mobile/components/ActionButton.js
|
||||||
|
|||||||
10
.eslintrc.js
@@ -97,6 +97,7 @@ module.exports = {
|
|||||||
|
|
||||||
'promise/prefer-await-to-then': 'error',
|
'promise/prefer-await-to-then': 'error',
|
||||||
'no-unneeded-ternary': 'error',
|
'no-unneeded-ternary': 'error',
|
||||||
|
'github/array-foreach': ['error'],
|
||||||
|
|
||||||
// -------------------------------
|
// -------------------------------
|
||||||
// Formatting
|
// Formatting
|
||||||
@@ -136,12 +137,13 @@ module.exports = {
|
|||||||
'named': 'never',
|
'named': 'never',
|
||||||
'asyncArrow': 'always',
|
'asyncArrow': 'always',
|
||||||
}],
|
}],
|
||||||
'multiline-comment-style': ['error', 'separate-lines'],
|
'multiline-comment-style': ['error', 'separate-lines', { checkJSDoc: true }],
|
||||||
'space-before-blocks': 'error',
|
'space-before-blocks': 'error',
|
||||||
'spaced-comment': ['error', 'always'],
|
'spaced-comment': ['error', 'always'],
|
||||||
'keyword-spacing': ['error', { 'before': true, 'after': true }],
|
'keyword-spacing': ['error', { 'before': true, 'after': true }],
|
||||||
'no-multi-spaces': ['error'],
|
'no-multi-spaces': ['error'],
|
||||||
'prefer-object-spread': ['error'],
|
'prefer-object-spread': ['error'],
|
||||||
|
'prefer-regex-literals': ['error', { disallowRedundantWrapping: true }],
|
||||||
|
|
||||||
// Regarding the keyword blacklist:
|
// Regarding the keyword blacklist:
|
||||||
// - err: We generally avoid using too many abbreviations, so it should
|
// - err: We generally avoid using too many abbreviations, so it should
|
||||||
@@ -161,6 +163,7 @@ module.exports = {
|
|||||||
'import',
|
'import',
|
||||||
'promise',
|
'promise',
|
||||||
'jest',
|
'jest',
|
||||||
|
'github',
|
||||||
],
|
],
|
||||||
'overrides': [
|
'overrides': [
|
||||||
{
|
{
|
||||||
@@ -181,9 +184,12 @@ module.exports = {
|
|||||||
'project': './tsconfig.eslint.json',
|
'project': './tsconfig.eslint.json',
|
||||||
},
|
},
|
||||||
'rules': {
|
'rules': {
|
||||||
|
'@typescript-eslint/ban-ts-comment': ['error'],
|
||||||
|
'@typescript-eslint/ban-types': 'error',
|
||||||
'@typescript-eslint/explicit-member-accessibility': ['error'],
|
'@typescript-eslint/explicit-member-accessibility': ['error'],
|
||||||
'@typescript-eslint/type-annotation-spacing': ['error', { 'before': false, 'after': true }],
|
'@typescript-eslint/type-annotation-spacing': ['error', { 'before': false, 'after': true }],
|
||||||
'@typescript-eslint/no-inferrable-types': ['error', { 'ignoreParameters': true, 'ignoreProperties': true }],
|
'@typescript-eslint/array-type': 'error',
|
||||||
|
'@typescript-eslint/no-inferrable-types': ['error'],
|
||||||
'@typescript-eslint/comma-dangle': ['error', {
|
'@typescript-eslint/comma-dangle': ['error', {
|
||||||
'arrays': 'always-multiline',
|
'arrays': 'always-multiline',
|
||||||
'objects': 'always-multiline',
|
'objects': 'always-multiline',
|
||||||
|
|||||||
1
.gitignore
vendored
@@ -342,6 +342,7 @@ packages/app-desktop/services/sortOrder/PerFolderSortOrderService.test.js
|
|||||||
packages/app-desktop/services/sortOrder/notesSortOrderUtils.js
|
packages/app-desktop/services/sortOrder/notesSortOrderUtils.js
|
||||||
packages/app-desktop/services/sortOrder/notesSortOrderUtils.test.js
|
packages/app-desktop/services/sortOrder/notesSortOrderUtils.test.js
|
||||||
packages/app-desktop/services/spellChecker/SpellCheckerServiceDriverNative.js
|
packages/app-desktop/services/spellChecker/SpellCheckerServiceDriverNative.js
|
||||||
|
packages/app-desktop/tools/notarizeMacApp.js
|
||||||
packages/app-desktop/utils/markupLanguageUtils.js
|
packages/app-desktop/utils/markupLanguageUtils.js
|
||||||
packages/app-mobile/PluginAssetsLoader.js
|
packages/app-mobile/PluginAssetsLoader.js
|
||||||
packages/app-mobile/components/ActionButton.js
|
packages/app-mobile/components/ActionButton.js
|
||||||
|
|||||||
15
.yarn/patches/eslint-npm-8.39.0-d92bace04d.patch
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
diff --git a/lib/rules/multiline-comment-style.js b/lib/rules/multiline-comment-style.js
|
||||||
|
index 9cb7f3473e5a124e2eedb12685650f047afa84b6..124e062955e1b51cbdddd0920c22446dc97dd261 100644
|
||||||
|
--- a/lib/rules/multiline-comment-style.js
|
||||||
|
+++ b/lib/rules/multiline-comment-style.js
|
||||||
|
@@ -377,6 +377,10 @@ module.exports = {
|
||||||
|
commentLines = commentLines.slice(1, commentLines.length - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ // We have to allow this because it's always a top comment and
|
||||||
|
+ // it has to be in a jsdoc block
|
||||||
|
+ if (commentLines.join('').trim().startsWith('@jest-environment')) return;
|
||||||
|
+
|
||||||
|
const tokenAfter = sourceCode.getTokenAfter(firstComment, { includeComments: true });
|
||||||
|
|
||||||
|
if (tokenAfter && firstComment.loc.end.line === tokenAfter.loc.start.line) {
|
||||||
810
Assets/WebsiteAssets/css/brand.css
Normal file
@@ -0,0 +1,810 @@
|
|||||||
|
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */button,hr,input{overflow:visible}progress,sub,sup{vertical-align:baseline}[type=checkbox],[type=radio],legend{box-sizing:border-box;padding:0}html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}details,main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:ButtonText dotted 1px}fieldset{padding:.35em .75em .625em}legend{color:inherit;display:table;max-width:100%;white-space:normal}textarea{overflow:auto}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}[hidden],template{display:none}
|
||||||
|
|
||||||
|
|
||||||
|
/* Global */
|
||||||
|
:root {
|
||||||
|
--primary-DarkBlue: #043873;
|
||||||
|
--primary-White: #ffffff;
|
||||||
|
--primary-DarkGray: #32363f;
|
||||||
|
--accent-LightBlue: #4f9cf9;
|
||||||
|
--accent-Yellow: #ffe492;
|
||||||
|
--variationPrimary-VaraintDark: #072445;
|
||||||
|
--variationPrimary-VaraintWhite: #f8f9fa;
|
||||||
|
--variationPrimary-VaraintDarkGray: #212529;
|
||||||
|
--variationAccent-VaraintLightBlue: #d9e8f8;
|
||||||
|
}
|
||||||
|
* {
|
||||||
|
font-family: "Montserrat", sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
#mobile_icon_logo{
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.joplin__para {
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 20.8px;
|
||||||
|
line-height: 1.5;
|
||||||
|
color: var(--primary-DarkGray);
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 767px) {
|
||||||
|
.joplin__para {
|
||||||
|
/* text-align: center; */
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 425px) {
|
||||||
|
.joplin__para {
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.joplin__tagline1 {
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: 32px;
|
||||||
|
line-height: 1.5;
|
||||||
|
color: var(--variationPrimary-VaraintDarkGray);
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 425px) {
|
||||||
|
.joplin__tagline1 {
|
||||||
|
font-size: 28px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media (min-width: 576px) {
|
||||||
|
.container {
|
||||||
|
max-width: 540px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
.container {
|
||||||
|
max-width: 720px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media (min-width: 992px) {
|
||||||
|
.container {
|
||||||
|
max-width: 960px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media (min-width: 1200px) {
|
||||||
|
.container {
|
||||||
|
max-width: 1140px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media (min-width: 1400px) {
|
||||||
|
.container {
|
||||||
|
max-width: 1220px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media (min-width: 768px) and (max-width: 991px) {
|
||||||
|
.justify-content-tablet-end {
|
||||||
|
justify-content: flex-end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Global */
|
||||||
|
|
||||||
|
/* Header */
|
||||||
|
header {
|
||||||
|
background-image: url("../images/brand/background\ blue\ motif\ 1.png");
|
||||||
|
background-position: center center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: cover;
|
||||||
|
border-radius: 5px;
|
||||||
|
padding: 36px 0;
|
||||||
|
}
|
||||||
|
header .container nav {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 425px) {
|
||||||
|
header .container nav {
|
||||||
|
align-items: flex-start;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
header .container nav h1.main-logo {
|
||||||
|
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 48px;
|
||||||
|
color: var(--primary-White);
|
||||||
|
text-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);
|
||||||
|
margin: 0;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 992px) {
|
||||||
|
header .container nav img {
|
||||||
|
max-width: 200px;
|
||||||
|
}
|
||||||
|
#brand_guidelines{
|
||||||
|
margin-top: 50px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 767px) {
|
||||||
|
header .container nav img {
|
||||||
|
max-width: 150px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 576px) {
|
||||||
|
#main_lockup {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
#mobile_icon_logo{
|
||||||
|
display: block;
|
||||||
|
max-width: 80px;
|
||||||
|
margin-top: 20px;
|
||||||
|
|
||||||
|
}
|
||||||
|
#brand_guidelines{
|
||||||
|
text-align: left;
|
||||||
|
padding-left: 20px;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 375px) {
|
||||||
|
header .container nav h1.main-logo {
|
||||||
|
font-size: 40px;
|
||||||
|
}
|
||||||
|
#main_lockup{
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#mobile_icon_logo{
|
||||||
|
display: block;
|
||||||
|
max-width: 80px;
|
||||||
|
margin-top: 20px;
|
||||||
|
|
||||||
|
}
|
||||||
|
#brand_guidelines{
|
||||||
|
text-align: left;
|
||||||
|
padding-left: 30px;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*header .container nav .logo {
|
||||||
|
display: flex;
|
||||||
|
align-items: flex-start;
|
||||||
|
justify-content: space-between;
|
||||||
|
gap: 30px;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
@media (min-width: 768px) and (max-width: 991px) {
|
||||||
|
header .container nav .logo {
|
||||||
|
align-items: flex-start;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
header .container nav .logo h3 {
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 48px;
|
||||||
|
color: #ffffff;
|
||||||
|
letter-spacing: 1px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 560px) {
|
||||||
|
header .container nav .logo h3 {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
/* Header */
|
||||||
|
/* joplin Logos */
|
||||||
|
.joplin__logos {
|
||||||
|
padding-top: 0px;
|
||||||
|
padding-bottom: 43px;
|
||||||
|
}
|
||||||
|
.joplin__logos h2.main-logo {
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: 40px;
|
||||||
|
color: var(--primary-DarkBlue);
|
||||||
|
margin-bottom: 45px;
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 767px) {
|
||||||
|
.joplin__logos h2.main-logo {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 767px) {
|
||||||
|
.joplin__logos h2.main-logo {
|
||||||
|
font-size: 33px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.joplin__logos .container > p {
|
||||||
|
margin-bottom: 6px;
|
||||||
|
}
|
||||||
|
.joplin__logos > .wrapper {
|
||||||
|
padding: 42px 59px 48px 66px;
|
||||||
|
margin: 40px 45px;
|
||||||
|
width: calc(100% - 6.5vw);
|
||||||
|
border: 1px solid var(--variationPrimary-VaraintDarkGray);
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 1440px) {
|
||||||
|
.joplin__logos > .wrapper {
|
||||||
|
padding: 40px 0 45px 0;
|
||||||
|
margin: 40px auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.joplin__logos .wrapper .para-1 {
|
||||||
|
margin-bottom: 19px;
|
||||||
|
}
|
||||||
|
.joplin__logos .wrapper .logo-wrapper {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: center;
|
||||||
|
gap: 27px;
|
||||||
|
}
|
||||||
|
.joplin__logos .wrapper .logo-wrapper:last-child {
|
||||||
|
gap: 24px;
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 320px) {
|
||||||
|
.joplin__logos .wrapper .logo-wrapper img {
|
||||||
|
width: 50px;
|
||||||
|
height: 50px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.joplin__logos .wrapper .logo-wrapper h4 {
|
||||||
|
font-size: 38px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 320px) {
|
||||||
|
.joplin__logos .wrapper .logo-wrapper h4 {
|
||||||
|
font-size: 32px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.joplin__logos .wrapper .logo-wrapper .blue-header {
|
||||||
|
color: var(--accent-LightBlue);
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
.joplin__logos .wrapper .logo-wrapper .white-header {
|
||||||
|
color: var(--primary-White);
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
.joplin__logos .wrapper .para-1 .blue-text {
|
||||||
|
font-weight: bold;
|
||||||
|
color: var(--accent-LightBlue);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 767px) {
|
||||||
|
.joplin__logos .wrapper .box:nth-child(1) {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.joplin__logos .wrapper .box:nth-child(1) > p {
|
||||||
|
width: 80%;
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 1024px) {
|
||||||
|
.joplin__logos .wrapper .box:nth-child(1) > p {
|
||||||
|
width: 90%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.para-1 {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.joplin__logos .wrapper-2 .our-para {
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
@media screen and (min-width: 1400px) {
|
||||||
|
.joplin__logos .wrapper .box2 {
|
||||||
|
/* padding-left: 50px;
|
||||||
|
margin-right: -130px; */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.joplin__logos .wrapper .colored-box {
|
||||||
|
background-color: var(--primary-DarkBlue);
|
||||||
|
padding: 17px 15px 15px 24px;
|
||||||
|
/* width: 320px; */
|
||||||
|
/* height: 189px; */
|
||||||
|
}
|
||||||
|
@media (min-width: 768px) and (max-width: 991px) {
|
||||||
|
.joplin__logos .wrapper .colored-box {
|
||||||
|
transform: translateX(-35px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.joplin__logos .wrapper .colored-box p {
|
||||||
|
font-weight: normal;
|
||||||
|
color: var(--primary-White);
|
||||||
|
margin-bottom: 20px;
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 767px) {
|
||||||
|
.joplin__logos .wrapper .colored-box {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.joplin__logos .wrapper .box-wrapper {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: flex-start;
|
||||||
|
gap: 14px;
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 767px) {
|
||||||
|
.joplin__logos .wrapper .box-wrapper {
|
||||||
|
flex-direction: column-reverse;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.joplin__logos .wrapper h2 {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.joplin__logos .wrapper .box-wrapper img {
|
||||||
|
margin-top: 7px;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
.joplin__logos .wrapper .box-wrapper p {
|
||||||
|
width: 70%;
|
||||||
|
}
|
||||||
|
.joplin__logos .wrapper-2 {
|
||||||
|
position: relative;
|
||||||
|
padding: 42px 0 35px 0;
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 425px) {
|
||||||
|
.joplin__logos .wrapper-2 {
|
||||||
|
padding: 42px 0 35px 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.joplin__logos .wrapper-2 .pipeline {
|
||||||
|
width: 1px;
|
||||||
|
height: 94%;
|
||||||
|
background-color: var(--variationPrimary-VaraintDarkGray);
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 47%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 1200px) {
|
||||||
|
.joplin__logos .wrapper-2 .pipeline {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 1366px) {
|
||||||
|
.joplin__logos .wrapper-2 .pipeline {
|
||||||
|
left: 49%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.joplin__logos .wrapper-2 .joplin__tagline1 {
|
||||||
|
margin-bottom: 34px;
|
||||||
|
}
|
||||||
|
.joplin__logos .wrapper-2 .our-para {
|
||||||
|
margin-top: 19px;
|
||||||
|
}
|
||||||
|
.joplin__logos .wrapper-2 img {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 425px) {
|
||||||
|
.joplin__logos .wrapper-2 .box-wrapper {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media (min-width: 1400px) and (max-width: 2100px) {
|
||||||
|
.joplin__logos .wrapper-2 .special-box {
|
||||||
|
margin-left: 150px;
|
||||||
|
}
|
||||||
|
.joplin__logos .wrapper-2 .special-box p {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.joplin__logos .wrapper-2 .pipeline {
|
||||||
|
left: 53%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* @media (min-width: 1441px) and (max-width: 1750px) {
|
||||||
|
.joplin__logos .p-row {
|
||||||
|
padding: 0 5rem;
|
||||||
|
}
|
||||||
|
} */
|
||||||
|
/* joplin Logos */
|
||||||
|
|
||||||
|
/* joplin__Colours */
|
||||||
|
.joplin__colours {
|
||||||
|
padding: 5px 0;
|
||||||
|
background-image: url("../images/brand/background\ blue\ motif\ 2.png");
|
||||||
|
background-position: center center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: cover;
|
||||||
|
}
|
||||||
|
.joplin__colours h2 {
|
||||||
|
color: var(--primary-White);
|
||||||
|
font-size: 40px;
|
||||||
|
margin-bottom: 28px;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 767px) {
|
||||||
|
.joplin__colours h2 {
|
||||||
|
font-size: 33px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 767px) {
|
||||||
|
.joplin__colours h2 {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.joplin__colours p {
|
||||||
|
color: var(--primary-White);
|
||||||
|
margin-bottom: 40px;
|
||||||
|
}
|
||||||
|
.joplin__colours .custom-row {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
gap: 45px;
|
||||||
|
padding-bottom: 20px;
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 1400px) {
|
||||||
|
.joplin__colours .custom-row {
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.joplin__colours .custom-row .chartjs-wrapper canvas {
|
||||||
|
width: 535px;
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 575px) {
|
||||||
|
.joplin__colours .custom-row .chartjs-wrapper canvas {
|
||||||
|
width: 270px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* joplin__Colours */
|
||||||
|
/* joplin__Pallet */
|
||||||
|
.joplin__pallet {
|
||||||
|
padding: 45px 0 92px 0;
|
||||||
|
}
|
||||||
|
.joplin__pallet h3 {
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 32px;
|
||||||
|
margin-bottom: 50px;
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 767px) {
|
||||||
|
.joplin__pallet h3 {
|
||||||
|
font-size: 28px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 1200px) {
|
||||||
|
.joplin__pallet h3 {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.joplin__pallet .sigma-wrapper {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: flex-start;
|
||||||
|
gap: 35px;
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 555px) {
|
||||||
|
.joplin__pallet .sigma-wrapper {
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.joplin__pallet .sigma-wrapper .circle-wrapper {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: flex-start;
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 992px) {
|
||||||
|
.joplin__pallet .sigma-wrapper .circle-wrapper {
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 1200px) {
|
||||||
|
.joplin__pallet .sigma-wrapper {
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.joplin__pallet .sigma-wrapper .circle-wrapper .circle {
|
||||||
|
width: 120px;
|
||||||
|
height: 120px;
|
||||||
|
border-radius: 50%;
|
||||||
|
border: 1px solid #000;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
}
|
||||||
|
.joplin__pallet .row-space {
|
||||||
|
padding: 50px 0;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.joplin__pallet .row-space div {
|
||||||
|
width: 97%;
|
||||||
|
height: 1px;
|
||||||
|
background-color: var(--primary-DarkGray);
|
||||||
|
}
|
||||||
|
.joplin__pallet .dark-blue {
|
||||||
|
background-color: var(--primary-DarkBlue);
|
||||||
|
}
|
||||||
|
.joplin__pallet .white {
|
||||||
|
background-color: var(--primary-White);
|
||||||
|
}
|
||||||
|
.joplin__pallet .dark-gray {
|
||||||
|
background-color: var(--primary-DarkGray);
|
||||||
|
}
|
||||||
|
.joplin__pallet .light-blue {
|
||||||
|
background-color: var(--accent-LightBlue);
|
||||||
|
}
|
||||||
|
.joplin__pallet .yellow {
|
||||||
|
background-color: var(--accent-Yellow);
|
||||||
|
}
|
||||||
|
.joplin__pallet .variant-dark {
|
||||||
|
background-color: var(--variationPrimary-VaraintDark);
|
||||||
|
}
|
||||||
|
.joplin__pallet .variant-white {
|
||||||
|
background-color: var(--variationPrimary-VaraintWhite);
|
||||||
|
}
|
||||||
|
.joplin__pallet .variant-dark-gray {
|
||||||
|
background-color: var(--variationPrimary-VaraintDarkGray);
|
||||||
|
}
|
||||||
|
.joplin__pallet .variant-light-blue {
|
||||||
|
background-color: var(--variationAccent-VaraintLightBlue);
|
||||||
|
}
|
||||||
|
/* joplin__Pallet */
|
||||||
|
/* joplin__State */
|
||||||
|
.joplin__state {
|
||||||
|
background-color: var(--primary-DarkBlue);
|
||||||
|
background-image: url("../images/brand/Rectangle\ 16.png");
|
||||||
|
background-position: bottom center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: cover;
|
||||||
|
padding: 65px 0 78px 0;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.joplin__state::before {
|
||||||
|
content: "";
|
||||||
|
width: 1px;
|
||||||
|
height: 98%;
|
||||||
|
background-color: var(--variationPrimary-VaraintDarkGray);
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 992px) {
|
||||||
|
.joplin__state::before {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.joplin__state .image {
|
||||||
|
transform: translateY(25px);
|
||||||
|
}
|
||||||
|
.joplin__state .wrapper > div {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.joplin__state .wrapper > div .box h2 {
|
||||||
|
color: var(--primary-White);
|
||||||
|
font-size: 40px;
|
||||||
|
margin-bottom: 28px;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
/* @media screen and (min-width: 1400px) {
|
||||||
|
.joplin__state .wrapper > div .box h2 {
|
||||||
|
text-wrap: nowrap;
|
||||||
|
}
|
||||||
|
} */
|
||||||
|
@media screen and (max-width: 767px) {
|
||||||
|
.joplin__state .wrapper > div .box h2 {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 500px) {
|
||||||
|
.joplin__state .wrapper > div .box h2 {
|
||||||
|
font-size: 38px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 767px) {
|
||||||
|
.joplin__state .wrapper > div .box h2 {
|
||||||
|
font-size: 33px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.joplin__state .wrapper > div .box p {
|
||||||
|
color: var(--primary-White);
|
||||||
|
width: 85%;
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 500px) {
|
||||||
|
.joplin__state .wrapper > div .box p {
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.joplin__state .wrapper > div .box img {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
.joplin__highlighter {
|
||||||
|
padding: 74px 0;
|
||||||
|
background-image: url("../images/brand/Rectangle\ 16.png");
|
||||||
|
background-position: center center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: cover;
|
||||||
|
}
|
||||||
|
.joplin__highlighter h2 {
|
||||||
|
color: var(--primary-White);
|
||||||
|
font-size: 40px;
|
||||||
|
margin-bottom: 28px;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 767px) {
|
||||||
|
.joplin__highlighter h2 {
|
||||||
|
font-size: 33px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 767px) {
|
||||||
|
.joplin__highlighter h2 {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.joplin__highlighter p {
|
||||||
|
color: var(--primary-White);
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 500px) {
|
||||||
|
.joplin__highlighter p {
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.joplin__highlighter .wrapper {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin-top: 22px;
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 767px) {
|
||||||
|
.joplin__highlighter .wrapper {
|
||||||
|
flex-wrap: wrap;
|
||||||
|
row-gap: 25px;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.joplin__highlighter .wrapper div {
|
||||||
|
padding: 32px 62px;
|
||||||
|
border-radius: 5px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.joplin__highlighter .wrapper div:first-child img {
|
||||||
|
position: absolute;
|
||||||
|
top: 57%;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
.joplin__highlighter .wrapper div:last-child img {
|
||||||
|
position: absolute;
|
||||||
|
top: 59%;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 1200px) {
|
||||||
|
.joplin__highlighter .wrapper div:first-child img {
|
||||||
|
top: 43%;
|
||||||
|
}
|
||||||
|
.joplin__highlighter .wrapper div:last-child img {
|
||||||
|
top: 44%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 767px) {
|
||||||
|
.joplin__highlighter .wrapper div:first-child img {
|
||||||
|
top: 59%;
|
||||||
|
}
|
||||||
|
.joplin__highlighter .wrapper div:last-child img {
|
||||||
|
top: 59%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 490px) {
|
||||||
|
.joplin__highlighter .wrapper div:first-child img {
|
||||||
|
top: 43%;
|
||||||
|
}
|
||||||
|
.joplin__highlighter .wrapper div:last-child img {
|
||||||
|
top: 43%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 320px) {
|
||||||
|
.joplin__highlighter .wrapper div:last-child img {
|
||||||
|
top: 36%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.joplin__highlighter .wrapper div.yellow {
|
||||||
|
background-color: var(--primary-White);
|
||||||
|
}
|
||||||
|
.joplin__highlighter .wrapper div.blue {
|
||||||
|
background-color: var(--primary-DarkBlue);
|
||||||
|
}
|
||||||
|
.joplin__highlighter .wrapper div h4 {
|
||||||
|
color: var(--variationPrimary-VaraintDarkGray);
|
||||||
|
margin: 0;
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: 20.8px;
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
.joplin__highlighter .wrapper div.blue h4 {
|
||||||
|
color: var(--primary-White);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* joplin__State */
|
||||||
|
/* joplin__Voice */
|
||||||
|
.joplin__voice {
|
||||||
|
padding: 78px 0;
|
||||||
|
}
|
||||||
|
.joplin__voice .container h2 {
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: 40px;
|
||||||
|
line-height: 1.5;
|
||||||
|
color: var(--variationPrimary-VaraintDarkGray);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 500px) {
|
||||||
|
.joplin__voice .container h2 {
|
||||||
|
font-size: 38px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 767px) {
|
||||||
|
.joplin__voice .container h2 {
|
||||||
|
font-size: 33px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.joplin__voice .container .wrapper {
|
||||||
|
margin-top: 57px;
|
||||||
|
}
|
||||||
|
.joplin__voice .container .wrapper .box {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: flex-start;
|
||||||
|
gap: 20px;
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 767px) {
|
||||||
|
.joplin__voice .container .wrapper .box {
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.joplin__voice .container .wrapper .box div:first-child {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
.joplin__voice .container .wrapper .box div:last-child {
|
||||||
|
flex: 2;
|
||||||
|
}
|
||||||
|
.joplin__voice .container .wrapper .box div h3 {
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: 32px;
|
||||||
|
line-height: 1.7;
|
||||||
|
color: var(--primary-DarkGray);
|
||||||
|
}
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
.joplin__voice .container .wrapper .box div h3 {
|
||||||
|
text-align: center;
|
||||||
|
font-size:28px;
|
||||||
|
}
|
||||||
|
.joplin__voice .container .wrapper .box {
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.joplin__voice .container .wrapper .box div p {
|
||||||
|
margin-bottom: 36px;
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 500px) {
|
||||||
|
.joplin__voice .container .wrapper .box div p {
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* joplin__Voice */
|
||||||
|
.chartjs-wrapper {
|
||||||
|
background-color: #d9d9d9;
|
||||||
|
padding: 10px 20px;
|
||||||
|
max-width: 45%;
|
||||||
|
}
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 195 KiB |
|
After Width: | Height: | Size: 10 KiB |
BIN
Assets/WebsiteAssets/images/brand/Rectangle 16.png
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
Assets/WebsiteAssets/images/brand/Rectangle 18.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
Assets/WebsiteAssets/images/brand/Vector.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
Assets/WebsiteAssets/images/brand/Vector2.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
Assets/WebsiteAssets/images/brand/Vector3.png
Normal file
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 27 KiB |
BIN
Assets/WebsiteAssets/images/brand/background blue motif 1.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
Assets/WebsiteAssets/images/brand/background blue motif 2.png
Normal file
|
After Width: | Height: | Size: 64 KiB |
BIN
Assets/WebsiteAssets/images/brand/customise-it-img 1.png
Normal file
|
After Width: | Height: | Size: 53 KiB |
BIN
Assets/WebsiteAssets/images/brand/frame-blue 1.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
Assets/WebsiteAssets/images/brand/frame-yellow 1.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
Assets/WebsiteAssets/images/brand/logo-text 1.png
Normal file
|
After Width: | Height: | Size: 6.0 KiB |
BIN
Assets/WebsiteAssets/images/brand/logo-text 2.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
Assets/WebsiteAssets/images/brand/logo-text-blue 1.png
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
BIN
Assets/WebsiteAssets/images/brand/tagline 1.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
0
Assets/WebsiteAssets/js/brand.js
Normal file
392
Assets/WebsiteAssets/templates/brand.mustache
Normal file
@@ -0,0 +1,392 @@
|
|||||||
|
<!-- Logos Section -->
|
||||||
|
<section class="joplin__logos">
|
||||||
|
<div class="container">
|
||||||
|
<h2 class="main-logo">Logos</h2>
|
||||||
|
<p class="joplin__para">
|
||||||
|
All the variations of Joplin logo are all front facing. <br />
|
||||||
|
To ensure a clarity and legibility of design, the logo should always
|
||||||
|
be surrounded by a clear space.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wrapper">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row align-items-center justify-content-tablet-end gy-5 p-row">
|
||||||
|
<div class="col-xxl-4 col-xl-4 col-lg-6 col-md-6 col-sm-12">
|
||||||
|
<div class="box">
|
||||||
|
<h3 class="joplin__tagline1">Lockup logo</h2>
|
||||||
|
<p class="joplin__para">
|
||||||
|
Joplin lockup is the company's main logo. It is used for
|
||||||
|
corporate materials and marketing communications. To ensure
|
||||||
|
sufficient contrast and readability, two following versions of
|
||||||
|
the lockup are provided.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-xxl-4 col-xl-4 col-lg-6 col-md-6 col-sm-12">
|
||||||
|
<div class="box box2">
|
||||||
|
<p class="joplin__para para-1">
|
||||||
|
<span class="blue-text">Blue text</span> version to be used on
|
||||||
|
bright background.
|
||||||
|
</p>
|
||||||
|
<div class="logo-wrapper">
|
||||||
|
<img src="{{imageBaseUrl}}/brand/Vector.png" alt="" />
|
||||||
|
<h4 class="blue-header">Joplin</h4>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-xxl-4 col-xl-4 col-lg-6 col-md-6 col-sm-12">
|
||||||
|
<div class="colored-box">
|
||||||
|
<p class="joplin__para">
|
||||||
|
White text version to be used <br />
|
||||||
|
on dark background.
|
||||||
|
</p>
|
||||||
|
<div class="logo-wrapper">
|
||||||
|
<img src="{{imageBaseUrl}}/brand/Vector2.png" alt="" />
|
||||||
|
<h4 class="white-header">Joplin</h4>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="wrapper wrapper-2">
|
||||||
|
<div class="container">
|
||||||
|
<div class="pipeline"></div>
|
||||||
|
<div class="row align-items-center gy-5 p-row justify-between">
|
||||||
|
<div class="col-xxl-6 col-xl-6 col-lg-12 col-md-12 col-sm-12">
|
||||||
|
<div class="box">
|
||||||
|
<h3 class="joplin__tagline1">Brandmark logo</h2>
|
||||||
|
<div class="box-wrapper">
|
||||||
|
<img
|
||||||
|
src="{{imageBaseUrl}}/brand/J logo transparent background 1.png"
|
||||||
|
alt=""
|
||||||
|
/>
|
||||||
|
<p class="joplin__para">
|
||||||
|
The classic brandmark icon is often used on a bright
|
||||||
|
background to help increase the contrast. It is a reduced
|
||||||
|
version of a logo which should be used in limited spacing or
|
||||||
|
when using a full company name is not necessary.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-xxl-6 col-xl-6 col-lg-12 col-md-12 col-sm-12">
|
||||||
|
<div class="box special-box">
|
||||||
|
<h3 class="joplin__tagline1">Joplin tagline</h3>
|
||||||
|
<img src="{{imageBaseUrl}}/brand/tagline 1.png" alt="" />
|
||||||
|
<p class="joplin__para our-para">
|
||||||
|
Our tagline is an invitation to capture your thoughts and
|
||||||
|
securely access them from any device.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
<section class="joplin__colours">
|
||||||
|
<div class="container">
|
||||||
|
<h2>Colours</h2>
|
||||||
|
<p class="joplin__para">
|
||||||
|
Two core colour palettes can be used while representing the brand. The
|
||||||
|
accent colours are used to highlight <br />
|
||||||
|
important elements and support the colours of the core palettes.
|
||||||
|
</p>
|
||||||
|
<div class="custom-row gy-4">
|
||||||
|
<div
|
||||||
|
class="chartjs-wrapper"
|
||||||
|
>
|
||||||
|
<canvas id="chart1" ></canvas>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="chartjs-wrapper"
|
||||||
|
>
|
||||||
|
<canvas id="chart2" ></canvas>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<!-- Colours Section -->
|
||||||
|
<!-- Pallet Section -->
|
||||||
|
<section class="joplin__pallet">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row gy-5">
|
||||||
|
<div class="col-xxl-6 col-xl-6 col-lg-12 col-md-12 col-sm-12">
|
||||||
|
<h3>Primary colours</h3>
|
||||||
|
<div class="sigma-wrapper">
|
||||||
|
<div class="circle-wrapper">
|
||||||
|
<div class="circle dark-blue"></div>
|
||||||
|
<div class="info">
|
||||||
|
<p class="joplin__para">Dark blue</p>
|
||||||
|
<p class="joplin__para">HEX - 043873</p>
|
||||||
|
<p class="joplin__para">RGB - 4, 56, 115</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="circle-wrapper">
|
||||||
|
<div class="circle white"></div>
|
||||||
|
<div class="info">
|
||||||
|
<p class="joplin__para">White</p>
|
||||||
|
<p class="joplin__para">HEX - FFFFFF</p>
|
||||||
|
<p class="joplin__para">RGB - 255, 255,</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="circle-wrapper">
|
||||||
|
<div class="circle dark-gray"></div>
|
||||||
|
<div class="info">
|
||||||
|
<p class="joplin__para">Dark gray</p>
|
||||||
|
<p class="joplin__para">HEX - 32363F</p>
|
||||||
|
<p class="joplin__para">RGB - 50, 54, 63</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-1"></div>
|
||||||
|
<div class="col-xxl-5 col-xl-5 col-lg-12 col-md-12 col-sm-12">
|
||||||
|
<h3>Accent colours</h3>
|
||||||
|
<div class="sigma-wrapper">
|
||||||
|
<div class="circle-wrapper">
|
||||||
|
<div class="circle light-blue"></div>
|
||||||
|
<div class="info">
|
||||||
|
<p class="joplin__para">Light blue</p>
|
||||||
|
<p class="joplin__para">HEX - 4F9CF9</p>
|
||||||
|
<p class="joplin__para">RGB - 79, 156, 249</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="circle-wrapper">
|
||||||
|
<div class="circle yellow"></div>
|
||||||
|
<div class="info">
|
||||||
|
<p class="joplin__para">Yellow</p>
|
||||||
|
<p class="joplin__para">HEX - FFE492</p>
|
||||||
|
<p class="joplin__para">RGB - 255, 228, 146</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row row-space">
|
||||||
|
<div></div>
|
||||||
|
</div>
|
||||||
|
<div class="row gy-5">
|
||||||
|
<div class="col-xxl-6 col-xl-6 col-lg-12 col-md-12 col-sm-12">
|
||||||
|
<h3>
|
||||||
|
Allowed variations of <br />
|
||||||
|
primary colours
|
||||||
|
</h3>
|
||||||
|
<div class="sigma-wrapper">
|
||||||
|
<div class="circle-wrapper">
|
||||||
|
<div class="circle variant-dark"></div>
|
||||||
|
<div class="info">
|
||||||
|
<p class="joplin__para">Variant dark</p>
|
||||||
|
<p class="joplin__para">HEX - 072445</p>
|
||||||
|
<p class="joplin__para">RGB - 7, 36, 69</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="circle-wrapper">
|
||||||
|
<div class="circle variant-white"></div>
|
||||||
|
<div class="info">
|
||||||
|
<p class="joplin__para">Variant white</p>
|
||||||
|
<p class="joplin__para">HEX - F8F9FA</p>
|
||||||
|
<p class="joplin__para">RGB - 248, 249,</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="circle-wrapper">
|
||||||
|
<div class="circle variant-dark-gray"></div>
|
||||||
|
<div class="info">
|
||||||
|
<p class="joplin__para">Variant dark gray</p>
|
||||||
|
<p class="joplin__para">HEX - 212529</p>
|
||||||
|
<p class="joplin__para">RGB - 33, 37, 41</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-1"></div>
|
||||||
|
<div class="col-xxl-5 col-xl-5 col-lg-12 col-md-12 col-sm-12">
|
||||||
|
<h3>
|
||||||
|
Allowed variations of <br />
|
||||||
|
accent colours
|
||||||
|
</h3>
|
||||||
|
<div class="sigma-wrapper">
|
||||||
|
<div class="circle-wrapper">
|
||||||
|
<div class="circle variant-light-blue"></div>
|
||||||
|
<div class="info">
|
||||||
|
<p class="joplin__para">Variant light blue</p>
|
||||||
|
<p class="joplin__para">HEX - D9E8F8</p>
|
||||||
|
<p class="joplin__para">RGB - 217, 232,</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<!-- Pallet Section -->
|
||||||
|
<!-- State Section -->
|
||||||
|
<section class="joplin__state">
|
||||||
|
<div class="container">
|
||||||
|
<div class="wrapper row justify-content-between gy-5">
|
||||||
|
<div class="col-12 col-lg-5">
|
||||||
|
<div class="box pb-3">
|
||||||
|
<h2>Typography</h2>
|
||||||
|
<p class="joplin__para">
|
||||||
|
<b>Font-family: Montserrat</b> <br />
|
||||||
|
Montserrat is a typeface chosen for its great readability. It is
|
||||||
|
used as a default font. Sans-serif font should be used when
|
||||||
|
Montserrat is not available.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="box">
|
||||||
|
<h2>Connector element</h2>
|
||||||
|
<p class="joplin__para">
|
||||||
|
The graphic element that represents the connection between the
|
||||||
|
components, files and data. It's Joplin's signature element
|
||||||
|
present in application's website as well as in marketing
|
||||||
|
communications.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-12 col-lg-5">
|
||||||
|
<div class="box">
|
||||||
|
<h2>Imagery</h2>
|
||||||
|
<p class="joplin__para">
|
||||||
|
The company uses vector art illustration . It ensures high
|
||||||
|
quality images in any scale, large or small. All the
|
||||||
|
illustrations come from storyset.com and are personalised to
|
||||||
|
match the company's colours.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="box">
|
||||||
|
<img src="{{imageBaseUrl}}/brand/customise-it-img 1.png" alt="" class="image" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section class="joplin__highlighter">
|
||||||
|
<div class="container">
|
||||||
|
<h2>Highlighter</h2>
|
||||||
|
<p class="joplin__para">
|
||||||
|
It is a reference to process of note taking on paper. It is used to
|
||||||
|
emphasize words in the titles. There are two <br />
|
||||||
|
variations of the element:
|
||||||
|
</p>
|
||||||
|
<div class="wrapper">
|
||||||
|
<div class="yellow">
|
||||||
|
<h4>Yellow version under dark text</h4>
|
||||||
|
<img src="{{imageBaseUrl}}/brand/frame-yellow 1.png" alt="" />
|
||||||
|
</div>
|
||||||
|
<div class="blue">
|
||||||
|
<h4>Light blue version under white text</h4>
|
||||||
|
<img src="{{imageBaseUrl}}/brand/frame-blue 1.png" alt="" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section class="joplin__voice">
|
||||||
|
<div class="container">
|
||||||
|
<h2>Tone of voice</h2>
|
||||||
|
<div class="wrapper">
|
||||||
|
<div class="box">
|
||||||
|
<div>
|
||||||
|
<h3>
|
||||||
|
Professional, <br />
|
||||||
|
Friendly, <br />
|
||||||
|
Welcoming, <br />
|
||||||
|
Trustworthy, <br />
|
||||||
|
Open-minded, <br />
|
||||||
|
Genuine
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<p class="joplin__para">
|
||||||
|
We believe that transparency is key to honest and successful
|
||||||
|
communication. We remain <b>trustworthy</b> and
|
||||||
|
<b>genuine</b> in engaging with our users and Joplin community.
|
||||||
|
</p>
|
||||||
|
<p class="joplin__para">
|
||||||
|
As a company providing open-source product we stay
|
||||||
|
<b>open-minded</b> and <b>enthusiastic</b> about new ideas and
|
||||||
|
solutions. At the same time we continue to be
|
||||||
|
<b>professional</b> to honour the trust the users place in us.
|
||||||
|
</p>
|
||||||
|
<p class="joplin__para">
|
||||||
|
We appreciate the value the users bring to our product and
|
||||||
|
therefore we keep our tone <b>friendly</b> and <b>welcoming</b>.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<!-- State Section -->
|
||||||
|
<!-- Chart.Js Lib -->
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.9.1/chart.min.js"></script>
|
||||||
|
<script>
|
||||||
|
const ctx = document.getElementById("chart1");
|
||||||
|
const myChart = new Chart(ctx, {
|
||||||
|
type: "pie",
|
||||||
|
data: {
|
||||||
|
labels: ["Dark blue 60%", "White 20%", "light blue 10%", "yellow 7%", "dark gray 3%"],
|
||||||
|
datasets: [
|
||||||
|
{
|
||||||
|
label: "# of Votes",
|
||||||
|
data: [60, 20, 10, 7, 3],
|
||||||
|
backgroundColor: [
|
||||||
|
"#043873",
|
||||||
|
"#ffffff",
|
||||||
|
"#4f9cf9",
|
||||||
|
"#ffe492",
|
||||||
|
"#212529",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
options: {
|
||||||
|
layout: {},
|
||||||
|
plugins: {
|
||||||
|
title: {
|
||||||
|
display: true,
|
||||||
|
text: "Blue colour palette",
|
||||||
|
font: {
|
||||||
|
size: 21,
|
||||||
|
align: "left",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const ctx2 = document.getElementById("chart2");
|
||||||
|
const myChart2 = new Chart(ctx2, {
|
||||||
|
type: "pie",
|
||||||
|
data: {
|
||||||
|
labels: ["White 60%", "Dark 20%", "light blue 10%", "dark gray 7%", "yellow 3%"],
|
||||||
|
datasets: [
|
||||||
|
{
|
||||||
|
label: "# of Votes",
|
||||||
|
data: [60, 20, 10, 7, 3],
|
||||||
|
backgroundColor: [
|
||||||
|
"#ffffff",
|
||||||
|
"#043873",
|
||||||
|
"#4f9cf9",
|
||||||
|
"#212529",
|
||||||
|
"#ffe492",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
options: {
|
||||||
|
layout: {},
|
||||||
|
plugins: {
|
||||||
|
title: {
|
||||||
|
display: true,
|
||||||
|
text: "White colour palette",
|
||||||
|
font: {
|
||||||
|
size: 21,
|
||||||
|
align: "left",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</script>
|
||||||
@@ -40,6 +40,7 @@ https://github.com/laurent22/joplin/blob/dev/{{{sourceMarkdownFile}}}
|
|||||||
onload="this.media='all'; this.onload = null"
|
onload="this.media='all'; this.onload = null"
|
||||||
/>
|
/>
|
||||||
<link rel="stylesheet" href="{{{assetUrls.css.site}}}" as="style" />
|
<link rel="stylesheet" href="{{{assetUrls.css.site}}}" as="style" />
|
||||||
|
{{#assetUrls.css.brand}}<link rel="stylesheet" href="{{{assetUrls.css.brand}}}" as="style" />{{/assetUrls.css.brand}}
|
||||||
<title>{{pageTitle}}</title>
|
<title>{{pageTitle}}</title>
|
||||||
|
|
||||||
<script
|
<script
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ WORKDIR /build
|
|||||||
|
|
||||||
COPY .yarn/plugins ./.yarn/plugins
|
COPY .yarn/plugins ./.yarn/plugins
|
||||||
COPY .yarn/releases ./.yarn/releases
|
COPY .yarn/releases ./.yarn/releases
|
||||||
|
COPY .yarn/patches ./.yarn/patches
|
||||||
COPY package.json .
|
COPY package.json .
|
||||||
COPY .yarnrc.yml .
|
COPY .yarnrc.yml .
|
||||||
COPY yarn.lock .
|
COPY yarn.lock .
|
||||||
|
|||||||
27
README.md
@@ -22,11 +22,11 @@ Three types of applications are available: for **desktop** (Windows, macOS and L
|
|||||||
|
|
||||||
Operating System | Download
|
Operating System | Download
|
||||||
---|---
|
---|---
|
||||||
Windows (32 and 64-bit) | <a href='https://objects.joplinusercontent.com/v2.10.19/Joplin-Setup-2.10.19.exe?source=JoplinWebsite&type=New'><img alt='Get it on Windows' width="134px" src='https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/BadgeWindows.png'/></a>
|
Windows (32 and 64-bit) | <a href='https://objects.joplinusercontent.com/v2.11.11/Joplin-Setup-2.11.11.exe?source=JoplinWebsite&type=New'><img alt='Get it on Windows' width="134px" src='https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/BadgeWindows.png'/></a>
|
||||||
macOS | <a href='https://objects.joplinusercontent.com/v2.10.19/Joplin-2.10.19.dmg?source=JoplinWebsite&type=New'><img alt='Get it on macOS' width="134px" src='https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/BadgeMacOS.png'/></a>
|
macOS | <a href='https://objects.joplinusercontent.com/v2.11.11/Joplin-2.11.11.dmg?source=JoplinWebsite&type=New'><img alt='Get it on macOS' width="134px" src='https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/BadgeMacOS.png'/></a>
|
||||||
Linux | <a href='https://objects.joplinusercontent.com/v2.10.19/Joplin-2.10.19.AppImage?source=JoplinWebsite&type=New'><img alt='Get it on Linux' width="134px" src='https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/BadgeLinux.png'/></a>
|
Linux | <a href='https://objects.joplinusercontent.com/v2.11.11/Joplin-2.11.11.AppImage?source=JoplinWebsite&type=New'><img alt='Get it on Linux' width="134px" src='https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/BadgeLinux.png'/></a>
|
||||||
|
|
||||||
**On Windows**, you may also use the <a href='https://objects.joplinusercontent.com/v2.10.19/JoplinPortable.exe?source=JoplinWebsite&type=New'>Portable version</a>. The [portable application](https://en.wikipedia.org/wiki/Portable_application) allows installing the software on a portable device such as a USB key. Simply copy the file JoplinPortable.exe in any directory on that USB key ; the application will then create a directory called "JoplinProfile" next to the executable file.
|
**On Windows**, you may also use the <a href='https://objects.joplinusercontent.com/v2.11.11/JoplinPortable.exe?source=JoplinWebsite&type=New'>Portable version</a>. The [portable application](https://en.wikipedia.org/wiki/Portable_application) allows installing the software on a portable device such as a USB key. Simply copy the file JoplinPortable.exe in any directory on that USB key ; the application will then create a directory called "JoplinProfile" next to the executable file.
|
||||||
|
|
||||||
**On Linux**, the recommended way is to use the following installation script as it will handle the desktop icon too:
|
**On Linux**, the recommended way is to use the following installation script as it will handle the desktop icon too:
|
||||||
|
|
||||||
@@ -75,10 +75,11 @@ A community maintained list of these distributions can be found here: [Unofficia
|
|||||||
| | | | |
|
| | | | |
|
||||||
| :---: | :---: | :---: | :---: |
|
| :---: | :---: | :---: | :---: |
|
||||||
| <img width="50" src="https://avatars2.githubusercontent.com/u/215668?s=96&v=4"/></br>[avanderberg](https://github.com/avanderberg) | <img width="50" src="https://avatars2.githubusercontent.com/u/67130?s=96&v=4"/></br>[chr15m](https://github.com/chr15m) | <img width="50" src="https://avatars2.githubusercontent.com/u/2793530?s=96&v=4"/></br>[CyberXZT](https://github.com/CyberXZT) | <img width="50" src="https://avatars2.githubusercontent.com/u/1307332?s=96&v=4"/></br>[dbrandonjohnson](https://github.com/dbrandonjohnson) |
|
| <img width="50" src="https://avatars2.githubusercontent.com/u/215668?s=96&v=4"/></br>[avanderberg](https://github.com/avanderberg) | <img width="50" src="https://avatars2.githubusercontent.com/u/67130?s=96&v=4"/></br>[chr15m](https://github.com/chr15m) | <img width="50" src="https://avatars2.githubusercontent.com/u/2793530?s=96&v=4"/></br>[CyberXZT](https://github.com/CyberXZT) | <img width="50" src="https://avatars2.githubusercontent.com/u/1307332?s=96&v=4"/></br>[dbrandonjohnson](https://github.com/dbrandonjohnson) |
|
||||||
| <img width="50" src="https://avatars2.githubusercontent.com/u/49439044?s=96&v=4"/></br>[fourstepper](https://github.com/fourstepper) | <img width="50" src="https://avatars2.githubusercontent.com/u/64712218?s=96&v=4"/></br>[Hegghammer](https://github.com/Hegghammer) | <img width="50" src="https://avatars2.githubusercontent.com/u/3266447?s=96&v=4"/></br>[iamwillbar](https://github.com/iamwillbar) | <img width="50" src="https://avatars2.githubusercontent.com/u/1310474?s=96&v=4"/></br>[jknowles](https://github.com/jknowles) |
|
| <img width="50" src="https://avatars2.githubusercontent.com/u/56287?s=96&v=4"/></br>[fats](https://github.com/fats) | <img width="50" src="https://avatars2.githubusercontent.com/u/49439044?s=96&v=4"/></br>[fourstepper](https://github.com/fourstepper) | <img width="50" src="https://avatars2.githubusercontent.com/u/64712218?s=96&v=4"/></br>[Hegghammer](https://github.com/Hegghammer) | <img width="50" src="https://avatars2.githubusercontent.com/u/3266447?s=96&v=4"/></br>[iamwillbar](https://github.com/iamwillbar) |
|
||||||
| <img width="50" src="https://avatars2.githubusercontent.com/u/11947658?s=96&v=4"/></br>[KentBrockman](https://github.com/KentBrockman) | <img width="50" src="https://avatars2.githubusercontent.com/u/5588131?s=96&v=4"/></br>[kianenigma](https://github.com/kianenigma) | <img width="50" src="https://avatars2.githubusercontent.com/u/24908652?s=96&v=4"/></br>[konishi-t](https://github.com/konishi-t) | <img width="50" src="https://avatars2.githubusercontent.com/u/42319182?s=96&v=4"/></br>[marcdw1289](https://github.com/marcdw1289) |
|
| <img width="50" src="https://avatars2.githubusercontent.com/u/1310474?s=96&v=4"/></br>[jknowles](https://github.com/jknowles) | <img width="50" src="https://avatars2.githubusercontent.com/u/11947658?s=96&v=4"/></br>[KentBrockman](https://github.com/KentBrockman) | <img width="50" src="https://avatars2.githubusercontent.com/u/5588131?s=96&v=4"/></br>[kianenigma](https://github.com/kianenigma) | <img width="50" src="https://avatars2.githubusercontent.com/u/24908652?s=96&v=4"/></br>[konishi-t](https://github.com/konishi-t) |
|
||||||
| <img width="50" src="https://avatars2.githubusercontent.com/u/126279083?s=96&v=4"/></br>[matmoly](https://github.com/matmoly) | <img width="50" src="https://avatars2.githubusercontent.com/u/1788010?s=96&v=4"/></br>[maxtruxa](https://github.com/maxtruxa) | <img width="50" src="https://avatars2.githubusercontent.com/u/29300939?s=96&v=4"/></br>[mcejp](https://github.com/mcejp) | <img width="50" src="https://avatars2.githubusercontent.com/u/31054972?s=96&v=4"/></br>[saarantras](https://github.com/saarantras) |
|
| <img width="50" src="https://avatars2.githubusercontent.com/u/42319182?s=96&v=4"/></br>[marcdw1289](https://github.com/marcdw1289) | <img width="50" src="https://avatars2.githubusercontent.com/u/126279083?s=96&v=4"/></br>[matmoly](https://github.com/matmoly) | <img width="50" src="https://avatars2.githubusercontent.com/u/1788010?s=96&v=4"/></br>[maxtruxa](https://github.com/maxtruxa) | <img width="50" src="https://avatars2.githubusercontent.com/u/29300939?s=96&v=4"/></br>[mcejp](https://github.com/mcejp) |
|
||||||
| <img width="50" src="https://avatars2.githubusercontent.com/u/327998?s=96&v=4"/></br>[sif](https://github.com/sif) | <img width="50" src="https://avatars2.githubusercontent.com/u/765564?s=96&v=4"/></br>[taskcruncher](https://github.com/taskcruncher) | <img width="50" src="https://avatars2.githubusercontent.com/u/333944?s=96&v=4"/></br>[tateisu](https://github.com/tateisu) | |
|
| <img width="50" src="https://avatars2.githubusercontent.com/u/31054972?s=96&v=4"/></br>[saarantras](https://github.com/saarantras) | <img width="50" src="https://avatars2.githubusercontent.com/u/327998?s=96&v=4"/></br>[sif](https://github.com/sif) | <img width="50" src="https://avatars2.githubusercontent.com/u/765564?s=96&v=4"/></br>[taskcruncher](https://github.com/taskcruncher) | <img width="50" src="https://avatars2.githubusercontent.com/u/333944?s=96&v=4"/></br>[tateisu](https://github.com/tateisu) |
|
||||||
|
| | | | |
|
||||||
<!-- SPONSORS-GITHUB -->
|
<!-- SPONSORS-GITHUB -->
|
||||||
|
|
||||||
<!-- TOC -->
|
<!-- TOC -->
|
||||||
@@ -153,7 +154,9 @@ A community maintained list of these distributions can be found here: [Unofficia
|
|||||||
- [Changelog (iOS)](https://github.com/laurent22/joplin/blob/dev/readme/changelog_ios.md)
|
- [Changelog (iOS)](https://github.com/laurent22/joplin/blob/dev/readme/changelog_ios.md)
|
||||||
- [Changelog (CLI App)](https://github.com/laurent22/joplin/blob/dev/readme/changelog_cli.md)
|
- [Changelog (CLI App)](https://github.com/laurent22/joplin/blob/dev/readme/changelog_cli.md)
|
||||||
- [Changelog (Server)](https://github.com/laurent22/joplin/blob/dev/readme/changelog_server.md)
|
- [Changelog (Server)](https://github.com/laurent22/joplin/blob/dev/readme/changelog_server.md)
|
||||||
|
- [Guiding principles](https://github.com/laurent22/joplin/blob/dev/readme/principles.md)
|
||||||
- [Stats](https://github.com/laurent22/joplin/blob/dev/readme/stats.md)
|
- [Stats](https://github.com/laurent22/joplin/blob/dev/readme/stats.md)
|
||||||
|
- [Brand guidelines](https://joplinapp.org/brand)
|
||||||
- [Donate](https://github.com/laurent22/joplin/blob/dev/readme/donate.md)
|
- [Donate](https://github.com/laurent22/joplin/blob/dev/readme/donate.md)
|
||||||
<!-- TOC -->
|
<!-- TOC -->
|
||||||
|
|
||||||
@@ -555,17 +558,17 @@ Current translations:
|
|||||||
<img src="https://joplinapp.org/images/flags/country-4x3/be.png" width="16px"/> | Nederlands (België, Belgique, Belgien) | [nl_BE](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/nl_BE.po) | | 78%
|
<img src="https://joplinapp.org/images/flags/country-4x3/be.png" width="16px"/> | Nederlands (België, Belgique, Belgien) | [nl_BE](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/nl_BE.po) | | 78%
|
||||||
<img src="https://joplinapp.org/images/flags/country-4x3/nl.png" width="16px"/> | Nederlands (Nederland) | [nl_NL](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/nl_NL.po) | [MHolkamp](mailto:mholkamp@users.noreply.github.com) | 87%
|
<img src="https://joplinapp.org/images/flags/country-4x3/nl.png" width="16px"/> | Nederlands (Nederland) | [nl_NL](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/nl_NL.po) | [MHolkamp](mailto:mholkamp@users.noreply.github.com) | 87%
|
||||||
<img src="https://joplinapp.org/images/flags/country-4x3/no.png" width="16px"/> | Norwegian (Norge, Noreg) | [nb_NO](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/nb_NO.po) | [Mats Estensen](mailto:code@mxe.no) | 87%
|
<img src="https://joplinapp.org/images/flags/country-4x3/no.png" width="16px"/> | Norwegian (Norge, Noreg) | [nb_NO](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/nb_NO.po) | [Mats Estensen](mailto:code@mxe.no) | 87%
|
||||||
<img src="https://joplinapp.org/images/flags/country-4x3/ir.png" width="16px"/> | Persian | [fa](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/fa.po) | [Kourosh Firoozbakht](mailto:kourox@protonmail.com) | 55%
|
<img src="https://joplinapp.org/images/flags/country-4x3/ir.png" width="16px"/> | Persian | [fa](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/fa.po) | [Kourosh Firoozbakht](mailto:kourox@protonmail.com) | 54%
|
||||||
<img src="https://joplinapp.org/images/flags/country-4x3/pl.png" width="16px"/> | Polski (Polska) | [pl_PL](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/pl_PL.po) | [X3NO](mailto:X3NO@disroot.org) | 90%
|
<img src="https://joplinapp.org/images/flags/country-4x3/pl.png" width="16px"/> | Polski (Polska) | [pl_PL](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/pl_PL.po) | [X3NO](mailto:X3NO@disroot.org) | 89%
|
||||||
<img src="https://joplinapp.org/images/flags/country-4x3/br.png" width="16px"/> | Português (Brasil) | [pt_BR](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/pt_BR.po) | [Douglas Leão](mailto:djlsplays@gmail.com) | 87%
|
<img src="https://joplinapp.org/images/flags/country-4x3/br.png" width="16px"/> | Português (Brasil) | [pt_BR](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/pt_BR.po) | [Douglas Leão](mailto:djlsplays@gmail.com) | 87%
|
||||||
<img src="https://joplinapp.org/images/flags/country-4x3/pt.png" width="16px"/> | Português (Portugal) | [pt_PT](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/pt_PT.po) | [Diogo Caveiro](mailto:dcaveiro@yahoo.com) | 72%
|
<img src="https://joplinapp.org/images/flags/country-4x3/pt.png" width="16px"/> | Português (Portugal) | [pt_PT](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/pt_PT.po) | [Diogo Caveiro](mailto:dcaveiro@yahoo.com) | 72%
|
||||||
<img src="https://joplinapp.org/images/flags/country-4x3/ro.png" width="16px"/> | Română | [ro](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/ro.po) | [Cristi Duluta](mailto:cristi.duluta@gmail.com) | 50%
|
<img src="https://joplinapp.org/images/flags/country-4x3/ro.png" width="16px"/> | Română | [ro](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/ro.po) | [Cristi Duluta](mailto:cristi.duluta@gmail.com) | 50%
|
||||||
<img src="https://joplinapp.org/images/flags/country-4x3/si.png" width="16px"/> | Slovenian (Slovenija) | [sl_SI](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/sl_SI.po) | [Martin Korelič](mailto:martin.korelic@protonmail.com) | 80%
|
<img src="https://joplinapp.org/images/flags/country-4x3/si.png" width="16px"/> | Slovenian (Slovenija) | [sl_SI](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/sl_SI.po) | [Martin Korelič](mailto:martin.korelic@protonmail.com) | 79%
|
||||||
<img src="https://joplinapp.org/images/flags/country-4x3/se.png" width="16px"/> | Svenska | [sv](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/sv.po) | [Jonatan Nyberg](mailto:jonatan@autistici.org) | 99%
|
<img src="https://joplinapp.org/images/flags/country-4x3/se.png" width="16px"/> | Svenska | [sv](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/sv.po) | [Jonatan Nyberg](mailto:jonatan@autistici.org) | 99%
|
||||||
<img src="https://joplinapp.org/images/flags/country-4x3/th.png" width="16px"/> | Thai (ประเทศไทย) | [th_TH](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/th_TH.po) | | 36%
|
<img src="https://joplinapp.org/images/flags/country-4x3/th.png" width="16px"/> | Thai (ประเทศไทย) | [th_TH](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/th_TH.po) | | 36%
|
||||||
<img src="https://joplinapp.org/images/flags/country-4x3/vn.png" width="16px"/> | Tiếng Việt | [vi](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/vi.po) | | 77%
|
<img src="https://joplinapp.org/images/flags/country-4x3/vn.png" width="16px"/> | Tiếng Việt | [vi](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/vi.po) | | 77%
|
||||||
<img src="https://joplinapp.org/images/flags/country-4x3/tr.png" width="16px"/> | Türkçe (Türkiye) | [tr_TR](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/tr_TR.po) | [Arda Kılıçdağı](mailto:arda@kilicdagi.com) | 99%
|
<img src="https://joplinapp.org/images/flags/country-4x3/tr.png" width="16px"/> | Türkçe (Türkiye) | [tr_TR](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/tr_TR.po) | [Arda Kılıçdağı](mailto:arda@kilicdagi.com) | 99%
|
||||||
<img src="https://joplinapp.org/images/flags/country-4x3/ua.png" width="16px"/> | Ukrainian (Україна) | [uk_UA](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/uk_UA.po) | [Vyacheslav Andreykiv](mailto:vandreykiv@gmail.com) | 72%
|
<img src="https://joplinapp.org/images/flags/country-4x3/ua.png" width="16px"/> | Ukrainian (Україна) | [uk_UA](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/uk_UA.po) | [Vyacheslav Andreykiv](mailto:vandreykiv@gmail.com) | 71%
|
||||||
<img src="https://joplinapp.org/images/flags/country-4x3/gr.png" width="16px"/> | Ελληνικά (Ελλάδα) | [el_GR](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/el_GR.po) | [Harris Arvanitis](mailto:xaris@tuta.io) | 87%
|
<img src="https://joplinapp.org/images/flags/country-4x3/gr.png" width="16px"/> | Ελληνικά (Ελλάδα) | [el_GR](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/el_GR.po) | [Harris Arvanitis](mailto:xaris@tuta.io) | 87%
|
||||||
<img src="https://joplinapp.org/images/flags/country-4x3/ru.png" width="16px"/> | Русский (Россия) | [ru_RU](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/ru_RU.po) | [Dmitriy K](mailto:dmitry@atsip.ru) | 99%
|
<img src="https://joplinapp.org/images/flags/country-4x3/ru.png" width="16px"/> | Русский (Россия) | [ru_RU](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/ru_RU.po) | [Dmitriy K](mailto:dmitry@atsip.ru) | 99%
|
||||||
<img src="https://joplinapp.org/images/flags/country-4x3/rs.png" width="16px"/> | српски језик (Србија) | [sr_RS](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/sr_RS.po) | | 64%
|
<img src="https://joplinapp.org/images/flags/country-4x3/rs.png" width="16px"/> | српски језик (Србија) | [sr_RS](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/sr_RS.po) | | 64%
|
||||||
|
|||||||
@@ -353,5 +353,43 @@
|
|||||||
"web/bundles/": true,
|
"web/bundles/": true,
|
||||||
"web/env.php": true,
|
"web/env.php": true,
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"tasks": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"label": "transpile-server",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "cd ${workspaceFolder}/packages/server && yarn tsc",
|
||||||
|
"group": "build",
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"launch": {
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "Server",
|
||||||
|
"type": "node",
|
||||||
|
"request": "launch",
|
||||||
|
"preLaunchTask": "transpile-server",
|
||||||
|
"skipFiles": [
|
||||||
|
"<node_internals>/**"
|
||||||
|
],
|
||||||
|
"outFiles": [
|
||||||
|
"${workspaceFolder}/**/*.js",
|
||||||
|
"!**/node_modules/**"
|
||||||
|
],
|
||||||
|
"program": "${workspaceFolder}/packages/server/src/app.ts",
|
||||||
|
"args": [
|
||||||
|
"--env", "dev"
|
||||||
|
],
|
||||||
|
"env": {
|
||||||
|
"JOPLIN_IS_TESTING": "1",
|
||||||
|
"TERMS_URL": "https://example.com",
|
||||||
|
"PRIVACY_URL": "https://example.com",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
10
package.json
@@ -16,7 +16,7 @@
|
|||||||
"buildSequential": "yarn workspaces foreach --verbose --interlaced --topological run build && yarn run tsc",
|
"buildSequential": "yarn workspaces foreach --verbose --interlaced --topological run build && yarn run tsc",
|
||||||
"buildApiDoc": "yarn workspace joplin start apidoc ../../readme/api/references/rest_api.md",
|
"buildApiDoc": "yarn workspace joplin start apidoc ../../readme/api/references/rest_api.md",
|
||||||
"buildCommandIndex": "node packages/tools/gulp/tasks/buildCommandIndexRun.js",
|
"buildCommandIndex": "node packages/tools/gulp/tasks/buildCommandIndexRun.js",
|
||||||
"buildPluginDoc": "typedoc --name 'Joplin Plugin API Documentation' --mode file -theme './Assets/PluginDocTheme/' --readme './Assets/PluginDocTheme/index.md' --excludeNotExported --excludeExternals --excludePrivate --excludeProtected --out ../joplin-website/docs/api/references/plugin_api packages/lib/services/plugins/api/",
|
"buildPluginDoc": "cd packages/generate-plugin-doc && yarn run buildPluginDoc_",
|
||||||
"updateMarkdownDoc": "node ./packages/tools/updateMarkdownDoc",
|
"updateMarkdownDoc": "node ./packages/tools/updateMarkdownDoc",
|
||||||
"updateNews": "node ./packages/tools/website/updateNews",
|
"updateNews": "node ./packages/tools/website/updateNews",
|
||||||
"buildSettingJsonSchema": "yarn workspace joplin start settingschema ../../../joplin-website/docs/schema/settings.json",
|
"buildSettingJsonSchema": "yarn workspace joplin start settingschema ../../../joplin-website/docs/schema/settings.json",
|
||||||
@@ -77,18 +77,18 @@
|
|||||||
"eslint-plugin-react": "7.32.2",
|
"eslint-plugin-react": "7.32.2",
|
||||||
"execa": "5.1.1",
|
"execa": "5.1.1",
|
||||||
"fs-extra": "11.1.1",
|
"fs-extra": "11.1.1",
|
||||||
"glob": "8.1.0",
|
"glob": "10.2.7",
|
||||||
"gulp": "4.0.2",
|
"gulp": "4.0.2",
|
||||||
"husky": "3.1.0",
|
"husky": "3.1.0",
|
||||||
"lerna": "3.22.1",
|
"lerna": "3.22.1",
|
||||||
"lint-staged": "13.2.2",
|
"lint-staged": "13.2.2",
|
||||||
"madge": "6.0.0",
|
"madge": "6.0.0",
|
||||||
"npm-package-json-lint": "6.4.0",
|
"npm-package-json-lint": "6.4.0",
|
||||||
"typedoc": "0.17.8",
|
|
||||||
"typescript": "5.0.2"
|
"typescript": "5.0.2"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/fs-extra": "11.0.1",
|
"@types/fs-extra": "11.0.1",
|
||||||
|
"eslint-plugin-github": "4.8.0",
|
||||||
"http-server": "14.1.1",
|
"http-server": "14.1.1",
|
||||||
"node-gyp": "9.3.1",
|
"node-gyp": "9.3.1",
|
||||||
"nodemon": "2.0.22"
|
"nodemon": "2.0.22"
|
||||||
@@ -96,6 +96,8 @@
|
|||||||
"packageManager": "yarn@3.5.0",
|
"packageManager": "yarn@3.5.0",
|
||||||
"resolutions": {
|
"resolutions": {
|
||||||
"react-native-camera@4.2.1": "patch:react-native-camera@npm%3A4.2.1#./.yarn/patches/react-native-camera-npm-4.2.1-24b2600a7e.patch",
|
"react-native-camera@4.2.1": "patch:react-native-camera@npm%3A4.2.1#./.yarn/patches/react-native-camera-npm-4.2.1-24b2600a7e.patch",
|
||||||
"react-native-vosk@0.1.12": "patch:react-native-vosk@npm%3A0.1.12#./.yarn/patches/react-native-vosk-npm-0.1.12-76b1caaae8.patch"
|
"react-native-vosk@0.1.12": "patch:react-native-vosk@npm%3A0.1.12#./.yarn/patches/react-native-vosk-npm-0.1.12-76b1caaae8.patch",
|
||||||
|
"eslint@8.39.0": "patch:eslint@npm%3A8.39.0#./.yarn/patches/eslint-npm-8.39.0-d92bace04d.patch",
|
||||||
|
"eslint@^8.13.0": "patch:eslint@npm%3A8.39.0#./.yarn/patches/eslint-npm-8.39.0-d92bace04d.patch"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ class LinkSelector {
|
|||||||
for (let i = 0; i < lines.length; i++) {
|
for (let i = 0; i < lines.length; i++) {
|
||||||
const r = (lines[i] as any).matchAll(this.linkRegex_);
|
const r = (lines[i] as any).matchAll(this.linkRegex_);
|
||||||
const matches = [...r];
|
const matches = [...r];
|
||||||
|
// eslint-disable-next-line github/array-foreach -- Old code before rule was applied
|
||||||
matches.forEach((_e, n) => {
|
matches.forEach((_e, n) => {
|
||||||
newLinkStore.push(
|
newLinkStore.push(
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -146,6 +146,7 @@ class Application extends BaseApplication {
|
|||||||
|
|
||||||
commands(uiType = null) {
|
commands(uiType = null) {
|
||||||
if (!this.allCommandsLoaded_) {
|
if (!this.allCommandsLoaded_) {
|
||||||
|
// eslint-disable-next-line github/array-foreach -- Old code before rule was applied
|
||||||
fs.readdirSync(__dirname).forEach(path => {
|
fs.readdirSync(__dirname).forEach(path => {
|
||||||
if (path.indexOf('command-') !== 0) return;
|
if (path.indexOf('command-') !== 0) return;
|
||||||
if (path.endsWith('.test.js')) return;
|
if (path.endsWith('.test.js')) return;
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ export default class BaseCommand {
|
|||||||
return r[0];
|
return r[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
public setDispatcher(fn: Function) {
|
public setDispatcher(fn: Function) {
|
||||||
this.dispatcher_ = fn;
|
this.dispatcher_ = fn;
|
||||||
}
|
}
|
||||||
@@ -63,6 +64,7 @@ export default class BaseCommand {
|
|||||||
return this.dispatcher_(action);
|
return this.dispatcher_(action);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
public setStdout(fn: Function) {
|
public setStdout(fn: Function) {
|
||||||
this.stdout_ = fn;
|
this.stdout_ = fn;
|
||||||
}
|
}
|
||||||
@@ -71,6 +73,7 @@ export default class BaseCommand {
|
|||||||
if (this.stdout_) this.stdout_(text);
|
if (this.stdout_) this.stdout_(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
public setPrompt(fn: Function) {
|
public setPrompt(fn: Function) {
|
||||||
this.prompt_ = fn;
|
this.prompt_ = fn;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ function renderCommand(cmd) {
|
|||||||
|
|
||||||
function getCommands() {
|
function getCommands() {
|
||||||
const output = [];
|
const output = [];
|
||||||
|
// eslint-disable-next-line github/array-foreach -- Old code before rule was applied
|
||||||
fs.readdirSync(__dirname).forEach(path => {
|
fs.readdirSync(__dirname).forEach(path => {
|
||||||
if (path.indexOf('command-') !== 0) return;
|
if (path.indexOf('command-') !== 0) return;
|
||||||
const ext = fileExtension(path);
|
const ext = fileExtension(path);
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ class Command extends BaseCommand {
|
|||||||
return reject(new Error(`Invalid JSON passed to config --import: \n${error.message}.`));
|
return reject(new Error(`Invalid JSON passed to config --import: \n${error.message}.`));
|
||||||
}
|
}
|
||||||
if (settingsObj) {
|
if (settingsObj) {
|
||||||
|
// eslint-disable-next-line github/array-foreach -- Old code before rule was applied
|
||||||
Object.entries(settingsObj)
|
Object.entries(settingsObj)
|
||||||
.forEach(([key, value]) => {
|
.forEach(([key, value]) => {
|
||||||
Setting.setValue(key, value);
|
Setting.setValue(key, value);
|
||||||
|
|||||||
@@ -179,6 +179,7 @@ class Command extends BaseCommand {
|
|||||||
|
|
||||||
const dirPaths = function(targetPath: string) {
|
const dirPaths = function(targetPath: string) {
|
||||||
const paths: string[] = [];
|
const paths: string[] = [];
|
||||||
|
// eslint-disable-next-line github/array-foreach -- Old code before rule was applied
|
||||||
fs.readdirSync(targetPath).forEach((path: string) => {
|
fs.readdirSync(targetPath).forEach((path: string) => {
|
||||||
paths.push(path);
|
paths.push(path);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import { pathExists, writeFile } from 'fs-extra';
|
|||||||
class Command extends BaseCommand {
|
class Command extends BaseCommand {
|
||||||
|
|
||||||
private syncTargetId_: number = null;
|
private syncTargetId_: number = null;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
private releaseLockFn_: Function = null;
|
private releaseLockFn_: Function = null;
|
||||||
private oneDriveApiUtils_: any = null;
|
private oneDriveApiUtils_: any = null;
|
||||||
|
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ export default class PluginRunner extends BasePluginRunner {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public async run(plugin: Plugin, sandbox: Global): Promise<void> {
|
public async run(plugin: Plugin, sandbox: Global): Promise<void> {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
return new Promise((resolve: Function, reject: Function) => {
|
return new Promise((resolve: Function, reject: Function) => {
|
||||||
const onStarted = () => {
|
const onStarted = () => {
|
||||||
plugin.off('started', onStarted);
|
plugin.off('started', onStarted);
|
||||||
@@ -85,6 +86,7 @@ export default class PluginRunner extends BasePluginRunner {
|
|||||||
|
|
||||||
public async waitForSandboxCalls(): Promise<void> {
|
public async waitForSandboxCalls(): Promise<void> {
|
||||||
const startTime = Date.now();
|
const startTime = Date.now();
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
return new Promise((resolve: Function, reject: Function) => {
|
return new Promise((resolve: Function, reject: Function) => {
|
||||||
const iid = setInterval(() => {
|
const iid = setInterval(() => {
|
||||||
if (!Object.keys(this.activeSandboxCalls_).length) {
|
if (!Object.keys(this.activeSandboxCalls_).length) {
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import { _ } from '@joplin/lib/locale';
|
import { _ } from '@joplin/lib/locale';
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
export default (cmd: any, stdout: Function, store: Function, gui: Function) => {
|
export default (cmd: any, stdout: Function, store: Function, gui: Function) => {
|
||||||
cmd.setStdout((text: string) => {
|
cmd.setStdout((text: string) => {
|
||||||
return stdout(text);
|
return stdout(text);
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import Folder from '@joplin/lib/models/Folder';
|
|||||||
import BaseCommand from '../base-command';
|
import BaseCommand from '../base-command';
|
||||||
import setupCommand from '../setupCommand';
|
import setupCommand from '../setupCommand';
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
export const setupCommandForTesting = (CommandClass: any, stdout: Function = null): BaseCommand => {
|
export const setupCommandForTesting = (CommandClass: any, stdout: Function = null): BaseCommand => {
|
||||||
const command = new CommandClass();
|
const command = new CommandClass();
|
||||||
setupCommand(command, stdout, null, null);
|
setupCommand(command, stdout, null, null);
|
||||||
|
|||||||
@@ -35,15 +35,15 @@
|
|||||||
],
|
],
|
||||||
"owner": "Laurent Cozic"
|
"owner": "Laurent Cozic"
|
||||||
},
|
},
|
||||||
"version": "2.11.0",
|
"version": "2.12.0",
|
||||||
"bin": "./main.js",
|
"bin": "./main.js",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=10.0.0"
|
"node": ">=10.0.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@joplin/lib": "~2.11",
|
"@joplin/lib": "~2.12",
|
||||||
"@joplin/renderer": "~2.11",
|
"@joplin/renderer": "~2.12",
|
||||||
"@joplin/utils": "~2.11",
|
"@joplin/utils": "~2.12",
|
||||||
"aws-sdk": "2.1340.0",
|
"aws-sdk": "2.1340.0",
|
||||||
"chalk": "4.1.2",
|
"chalk": "4.1.2",
|
||||||
"compare-version": "0.1.2",
|
"compare-version": "0.1.2",
|
||||||
@@ -70,7 +70,7 @@
|
|||||||
"yargs-parser": "21.1.1"
|
"yargs-parser": "21.1.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@joplin/tools": "~2.11",
|
"@joplin/tools": "~2.12",
|
||||||
"@types/fs-extra": "11.0.1",
|
"@types/fs-extra": "11.0.1",
|
||||||
"@types/jest": "29.5.1",
|
"@types/jest": "29.5.1",
|
||||||
"@types/node": "18.15.13",
|
"@types/node": "18.15.13",
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import { newPluginScript } from '../../testUtils';
|
|||||||
|
|
||||||
const testPluginDir = `${supportDir}/plugins`;
|
const testPluginDir = `${supportDir}/plugins`;
|
||||||
|
|
||||||
function newPluginService(appVersion: string = '1.4') {
|
function newPluginService(appVersion = '1.4') {
|
||||||
const runner = new PluginRunner();
|
const runner = new PluginRunner();
|
||||||
const service = new PluginService();
|
const service = new PluginService();
|
||||||
service.initialize(
|
service.initialize(
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import Setting from '@joplin/lib/models/Setting';
|
|||||||
|
|
||||||
const testPluginDir = `${supportDir}/plugins`;
|
const testPluginDir = `${supportDir}/plugins`;
|
||||||
|
|
||||||
function newPluginService(appVersion: string = '1.4') {
|
function newPluginService(appVersion = '1.4') {
|
||||||
const runner = new PluginRunner();
|
const runner = new PluginRunner();
|
||||||
const service = new PluginService();
|
const service = new PluginService();
|
||||||
service.initialize(
|
service.initialize(
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"manifest_version": 2,
|
"manifest_version": 2,
|
||||||
"name": "Joplin Web Clipper [DEV]",
|
"name": "Joplin Web Clipper [DEV]",
|
||||||
"version": "2.11.2",
|
"version": "2.12.0",
|
||||||
"description": "Capture and save web pages and screenshots from your browser to Joplin.",
|
"description": "Capture and save web pages and screenshots from your browser to Joplin.",
|
||||||
"homepage_url": "https://joplinapp.org",
|
"homepage_url": "https://joplinapp.org",
|
||||||
"content_security_policy": "script-src 'self'; object-src 'self'",
|
"content_security_policy": "script-src 'self'; object-src 'self'",
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ const dotenvFiles = [
|
|||||||
// that have already been set. Variable expansion is supported in .env files.
|
// that have already been set. Variable expansion is supported in .env files.
|
||||||
// https://github.com/motdotla/dotenv
|
// https://github.com/motdotla/dotenv
|
||||||
// https://github.com/motdotla/dotenv-expand
|
// https://github.com/motdotla/dotenv-expand
|
||||||
|
// eslint-disable-next-line github/array-foreach -- Old code before rule was applied
|
||||||
dotenvFiles.forEach(dotenvFile => {
|
dotenvFiles.forEach(dotenvFile => {
|
||||||
if (fs.existsSync(dotenvFile)) {
|
if (fs.existsSync(dotenvFile)) {
|
||||||
require('dotenv-expand')(
|
require('dotenv-expand')(
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
/* eslint-disable multiline-comment-style */
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
|
|||||||
@@ -130,6 +130,7 @@ checkBrowsers(paths.appPath, isInteractive)
|
|||||||
openBrowser(urls.localUrlForBrowser);
|
openBrowser(urls.localUrlForBrowser);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// eslint-disable-next-line github/array-foreach -- Old code before rule was applied
|
||||||
['SIGINT', 'SIGTERM'].forEach((sig) => {
|
['SIGINT', 'SIGTERM'].forEach((sig) => {
|
||||||
process.on(sig, () => {
|
process.on(sig, () => {
|
||||||
devServer.close();
|
devServer.close();
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ export default class ElectronAppWrapper {
|
|||||||
private isDebugMode_: boolean;
|
private isDebugMode_: boolean;
|
||||||
private profilePath_: string;
|
private profilePath_: string;
|
||||||
private win_: BrowserWindow = null;
|
private win_: BrowserWindow = null;
|
||||||
private willQuitApp_: boolean = false;
|
private willQuitApp_ = false;
|
||||||
private tray_: any = null;
|
private tray_: any = null;
|
||||||
private buildDir_: string = null;
|
private buildDir_: string = null;
|
||||||
private rendererProcessQuitReply_: RendererProcessQuitReply = null;
|
private rendererProcessQuitReply_: RendererProcessQuitReply = null;
|
||||||
|
|||||||
@@ -151,6 +151,7 @@ export default class InteropServiceHelper {
|
|||||||
return `${filename}.${fileExtension}`;
|
return `${filename}.${fileExtension}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
public static async export(_dispatch: Function, module: Module, options: ExportNoteOptions = null) {
|
public static async export(_dispatch: Function, module: Module, options: ExportNoteOptions = null) {
|
||||||
if (!options) options = {};
|
if (!options) options = {};
|
||||||
|
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ const appDefaultState = createAppDefaultState(
|
|||||||
class Application extends BaseApplication {
|
class Application extends BaseApplication {
|
||||||
|
|
||||||
private checkAllPluginStartedIID_: any = null;
|
private checkAllPluginStartedIID_: any = null;
|
||||||
private initPluginServiceDone_: boolean = false;
|
private initPluginServiceDone_ = false;
|
||||||
|
|
||||||
public constructor() {
|
public constructor() {
|
||||||
super();
|
super();
|
||||||
|
|||||||
@@ -88,6 +88,7 @@ export class Bridge {
|
|||||||
// Perhaps the easiest would be to patch electron-context-menu to
|
// Perhaps the easiest would be to patch electron-context-menu to
|
||||||
// support the renderer process again. Or possibly revert to an old
|
// support the renderer process again. Or possibly revert to an old
|
||||||
// version of electron-context-menu.
|
// version of electron-context-menu.
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
public setupContextMenu(_spellCheckerMenuItemsHandler: Function) {
|
public setupContextMenu(_spellCheckerMenuItemsHandler: Function) {
|
||||||
require('electron-context-menu')({
|
require('electron-context-menu')({
|
||||||
allWindows: [this.window()],
|
allWindows: [this.window()],
|
||||||
@@ -255,6 +256,7 @@ export class Bridge {
|
|||||||
return nativeTheme.shouldUseDarkColors;
|
return nativeTheme.shouldUseDarkColors;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
public addEventListener(name: string, fn: Function) {
|
public addEventListener(name: string, fn: Function) {
|
||||||
if (name === 'nativeThemeUpdated') {
|
if (name === 'nativeThemeUpdated') {
|
||||||
nativeTheme.on('updated', fn);
|
nativeTheme.on('updated', fn);
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ export const declaration: CommandDeclaration = {
|
|||||||
|
|
||||||
export const runtime = (): CommandRuntime => {
|
export const runtime = (): CommandRuntime => {
|
||||||
return {
|
return {
|
||||||
execute: async (_context: CommandContext, noteId: string, reverseRevIndex: number = 0) => {
|
execute: async (_context: CommandContext, noteId: string, reverseRevIndex = 0) => {
|
||||||
try {
|
try {
|
||||||
const note = await RevisionService.instance().restoreNoteById(noteId, reverseRevIndex);
|
const note = await RevisionService.instance().restoreNoteById(noteId, reverseRevIndex);
|
||||||
alert(RevisionService.instance().restoreSuccessMessage(note));
|
alert(RevisionService.instance().restoreSuccessMessage(note));
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ interface Props {
|
|||||||
iconName?: string;
|
iconName?: string;
|
||||||
level?: ButtonLevel;
|
level?: ButtonLevel;
|
||||||
className?: string;
|
className?: string;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
onClick?: Function;
|
onClick?: Function;
|
||||||
color?: string;
|
color?: string;
|
||||||
iconAnimation?: string;
|
iconAnimation?: string;
|
||||||
|
|||||||
@@ -6,8 +6,11 @@ const styled = require('styled-components').default;
|
|||||||
interface Props {
|
interface Props {
|
||||||
backButtonTitle?: string;
|
backButtonTitle?: string;
|
||||||
hasChanges?: boolean;
|
hasChanges?: boolean;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
onCancelClick: Function;
|
onCancelClick: Function;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
onSaveClick?: Function;
|
onSaveClick?: Function;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
onApplyClick?: Function;
|
onApplyClick?: Function;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ const styled = require('styled-components').default;
|
|||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
selection: string;
|
selection: string;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
onSelectionChange: Function;
|
onSelectionChange: Function;
|
||||||
sections: any[];
|
sections: any[];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,9 +45,13 @@ const RepoApiErrorMessage = styled(StyledMessage)<any>`
|
|||||||
interface Props {
|
interface Props {
|
||||||
value: any;
|
value: any;
|
||||||
themeId: number;
|
themeId: number;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
onChange: Function;
|
onChange: Function;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
renderLabel: Function;
|
renderLabel: Function;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
renderDescription: Function;
|
renderDescription: Function;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
renderHeader: Function;
|
renderHeader: Function;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -146,6 +150,7 @@ export default function(props: Props) {
|
|||||||
const pluginIds = await repoApi().canBeUpdatedPlugins(pluginItems.map(p => p.manifest), pluginService.appVersion);
|
const pluginIds = await repoApi().canBeUpdatedPlugins(pluginItems.map(p => p.manifest), pluginService.appVersion);
|
||||||
if (cancelled) return;
|
if (cancelled) return;
|
||||||
const conv: Record<string, boolean> = {};
|
const conv: Record<string, boolean> = {};
|
||||||
|
// eslint-disable-next-line github/array-foreach -- Old code before rule was applied
|
||||||
pluginIds.forEach(id => conv[id] = true);
|
pluginIds.forEach(id => conv[id] = true);
|
||||||
setCanBeUpdatedPluginIds(conv);
|
setCanBeUpdatedPluginIds(conv);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ interface Props {
|
|||||||
onSearchQueryChange(event: OnChangeEvent): void;
|
onSearchQueryChange(event: OnChangeEvent): void;
|
||||||
pluginSettings: PluginSettings;
|
pluginSettings: PluginSettings;
|
||||||
onPluginSettingsChange(event: any): void;
|
onPluginSettingsChange(event: any): void;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
renderDescription: Function;
|
renderDescription: Function;
|
||||||
maxWidth: number;
|
maxWidth: number;
|
||||||
repoApi(): RepositoryApi;
|
repoApi(): RepositoryApi;
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ export interface OnPluginSettingChangeEvent {
|
|||||||
|
|
||||||
type OnPluginSettingChangeHandler = (event: OnPluginSettingChangeEvent)=> void;
|
type OnPluginSettingChangeHandler = (event: OnPluginSettingChangeEvent)=> void;
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
export default function(setInstallingPluginIds: Function, pluginSettings: PluginSettings, repoApi: Function, onPluginSettingsChange: OnPluginSettingChangeHandler, isUpdate: boolean) {
|
export default function(setInstallingPluginIds: Function, pluginSettings: PluginSettings, repoApi: Function, onPluginSettingsChange: OnPluginSettingChangeHandler, isUpdate: boolean) {
|
||||||
return useCallback(async (event: ItemEvent) => {
|
return useCallback(async (event: ItemEvent) => {
|
||||||
const pluginId = event.item.manifest.id;
|
const pluginId = event.item.manifest.id;
|
||||||
|
|||||||
@@ -26,8 +26,10 @@ const DialogRoot = styled.div`
|
|||||||
`;
|
`;
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
renderContent: Function;
|
renderContent: Function;
|
||||||
className?: string;
|
className?: string;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
onClose?: Function;
|
onClose?: Function;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,9 @@ import { useEffect, useState, useRef, useCallback } from 'react';
|
|||||||
import { isInsideContainer } from '@joplin/lib/dom';
|
import { isInsideContainer } from '@joplin/lib/dom';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
onOkButtonClick: Function;
|
onOkButtonClick: Function;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
onCancelButtonClick: Function;
|
onCancelButtonClick: Function;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import FolderIconBox from '../FolderIconBox';
|
|||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
themeId: number;
|
themeId: number;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
dispatch: Function;
|
dispatch: Function;
|
||||||
folderId: string;
|
folderId: string;
|
||||||
parentId: string;
|
parentId: string;
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import { AppState } from '../app.reducer';
|
|||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
tip: string;
|
tip: string;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
onClick: Function;
|
onClick: Function;
|
||||||
themeId: number;
|
themeId: number;
|
||||||
style: any;
|
style: any;
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ interface Props {
|
|||||||
themeId: number;
|
themeId: number;
|
||||||
style: any;
|
style: any;
|
||||||
iconName: string;
|
iconName: string;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
onClick: Function;
|
onClick: Function;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,9 +5,12 @@ interface Props {
|
|||||||
itemHeight: number;
|
itemHeight: number;
|
||||||
items: any[];
|
items: any[];
|
||||||
disabled?: boolean;
|
disabled?: boolean;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
onKeyDown?: Function;
|
onKeyDown?: Function;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
itemRenderer: Function;
|
itemRenderer: Function;
|
||||||
className?: string;
|
className?: string;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
onNoteDrop?: Function;
|
onNoteDrop?: Function;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ interface Props {
|
|||||||
pluginHtmlContents: PluginHtmlContents;
|
pluginHtmlContents: PluginHtmlContents;
|
||||||
pluginsLoaded: boolean;
|
pluginsLoaded: boolean;
|
||||||
hasNotesBeingSaved: boolean;
|
hasNotesBeingSaved: boolean;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
dispatch: Function;
|
dispatch: Function;
|
||||||
mainLayout: LayoutItem;
|
mainLayout: LayoutItem;
|
||||||
style: any;
|
style: any;
|
||||||
@@ -121,6 +122,7 @@ class MainScreenComponent extends React.Component<Props, State> {
|
|||||||
private isPrinting_: boolean;
|
private isPrinting_: boolean;
|
||||||
private styleKey_: string;
|
private styleKey_: string;
|
||||||
private styles_: any;
|
private styles_: any;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
private promptOnClose_: Function;
|
private promptOnClose_: Function;
|
||||||
|
|
||||||
public constructor(props: Props) {
|
public constructor(props: Props) {
|
||||||
@@ -514,6 +516,7 @@ class MainScreenComponent extends React.Component<Props, State> {
|
|||||||
return this.styles_;
|
return this.styles_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
private renderNotificationMessage(message: string, callForAction: string, callForActionHandler: Function, callForAction2: string = null, callForActionHandler2: Function = null) {
|
private renderNotificationMessage(message: string, callForAction: string, callForActionHandler: Function, callForAction2: string = null, callForActionHandler2: Function = null) {
|
||||||
const theme = themeStyle(this.props.themeId);
|
const theme = themeStyle(this.props.themeId);
|
||||||
const urlStyle: any = { color: theme.colorWarnUrl, textDecoration: 'underline' };
|
const urlStyle: any = { color: theme.colorWarnUrl, textDecoration: 'underline' };
|
||||||
@@ -846,9 +849,7 @@ class MainScreenComponent extends React.Component<Props, State> {
|
|||||||
{this.renderPluginDialogs()}
|
{this.renderPluginDialogs()}
|
||||||
{noteContentPropertiesDialogOptions.visible && <NoteContentPropertiesDialog markupLanguage={noteContentPropertiesDialogOptions.markupLanguage} themeId={this.props.themeId} onClose={this.noteContentPropertiesDialog_close} text={noteContentPropertiesDialogOptions.text}/>}
|
{noteContentPropertiesDialogOptions.visible && <NoteContentPropertiesDialog markupLanguage={noteContentPropertiesDialogOptions.markupLanguage} themeId={this.props.themeId} onClose={this.noteContentPropertiesDialog_close} text={noteContentPropertiesDialogOptions.text}/>}
|
||||||
{notePropertiesDialogOptions.visible && <NotePropertiesDialog themeId={this.props.themeId} noteId={notePropertiesDialogOptions.noteId} onClose={this.notePropertiesDialog_close} onRevisionLinkClick={notePropertiesDialogOptions.onRevisionLinkClick} />}
|
{notePropertiesDialogOptions.visible && <NotePropertiesDialog themeId={this.props.themeId} noteId={notePropertiesDialogOptions.noteId} onClose={this.notePropertiesDialog_close} onRevisionLinkClick={notePropertiesDialogOptions.onRevisionLinkClick} />}
|
||||||
{/* @ts-ignore */}
|
|
||||||
{shareNoteDialogOptions.visible && <ShareNoteDialog themeId={this.props.themeId} noteIds={shareNoteDialogOptions.noteIds} onClose={this.shareNoteDialog_close} />}
|
{shareNoteDialogOptions.visible && <ShareNoteDialog themeId={this.props.themeId} noteIds={shareNoteDialogOptions.noteIds} onClose={this.shareNoteDialog_close} />}
|
||||||
{/* @ts-ignore */}
|
|
||||||
{shareFolderDialogOptions.visible && <ShareFolderDialog themeId={this.props.themeId} folderId={shareFolderDialogOptions.folderId} onClose={this.shareFolderDialog_close} />}
|
{shareFolderDialogOptions.visible && <ShareFolderDialog themeId={this.props.themeId} folderId={shareFolderDialogOptions.folderId} onClose={this.shareFolderDialog_close} />}
|
||||||
|
|
||||||
<PromptDialog autocomplete={promptOptions && 'autocomplete' in promptOptions ? promptOptions.autocomplete : null} defaultValue={promptOptions && promptOptions.value ? promptOptions.value : ''} themeId={this.props.themeId} style={styles.prompt} onClose={this.promptOnClose_} label={promptOptions ? promptOptions.label : ''} description={promptOptions ? promptOptions.description : null} visible={!!this.state.promptOptions} buttons={promptOptions && 'buttons' in promptOptions ? promptOptions.buttons : null} inputType={promptOptions && 'inputType' in promptOptions ? promptOptions.inputType : null} />
|
<PromptDialog autocomplete={promptOptions && 'autocomplete' in promptOptions ? promptOptions.autocomplete : null} defaultValue={promptOptions && promptOptions.value ? promptOptions.value : ''} themeId={this.props.themeId} style={styles.prompt} onClose={this.promptOnClose_} label={promptOptions ? promptOptions.label : ''} description={promptOptions ? promptOptions.description : null} visible={!!this.state.promptOptions} buttons={promptOptions && 'buttons' in promptOptions ? promptOptions.buttons : null} inputType={promptOptions && 'inputType' in promptOptions ? promptOptions.inputType : null} />
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ export const runtime = (): CommandRuntime => {
|
|||||||
} else if (uiType === UiType.CommandPalette) {
|
} else if (uiType === UiType.CommandPalette) {
|
||||||
menuItemById('commandPalette').click();
|
menuItemById('commandPalette').click();
|
||||||
} else if (uiType === UiType.ControlledApi) {
|
} else if (uiType === UiType.ControlledApi) {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
return new Promise((resolve: Function, reject: Function) => {
|
return new Promise((resolve: Function, reject: Function) => {
|
||||||
const menuItem = PluginManager.instance().menuItems().find((i: any) => i.id === 'controlledApi');
|
const menuItem = PluginManager.instance().menuItems().find((i: any) => i.id === 'controlledApi');
|
||||||
menuItem.userData = {
|
menuItem.userData = {
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ export const declaration: CommandDeclaration = {
|
|||||||
|
|
||||||
export const runtime = (): CommandRuntime => {
|
export const runtime = (): CommandRuntime => {
|
||||||
return {
|
return {
|
||||||
execute: async (_context: CommandContext, body: string = '', isTodo: boolean = false) => {
|
execute: async (_context: CommandContext, body = '', isTodo = false) => {
|
||||||
const folderId = Setting.value('activeFolderId');
|
const folderId = Setting.value('activeFolderId');
|
||||||
if (!folderId) return;
|
if (!folderId) return;
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ export const declaration: CommandDeclaration = {
|
|||||||
|
|
||||||
export const runtime = (): CommandRuntime => {
|
export const runtime = (): CommandRuntime => {
|
||||||
return {
|
return {
|
||||||
execute: async (_context: CommandContext, body: string = '') => {
|
execute: async (_context: CommandContext, body = '') => {
|
||||||
return CommandService.instance().execute('newNote', body, true);
|
return CommandService.instance().execute('newNote', body, true);
|
||||||
},
|
},
|
||||||
enabledCondition: 'oneFolderSelected && !inConflictFolder',
|
enabledCondition: 'oneFolderSelected && !inConflictFolder',
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ export const runtime = (): CommandRuntime => {
|
|||||||
const languages = state.settings['spellChecker.languages'];
|
const languages = state.settings['spellChecker.languages'];
|
||||||
if (languages.length === 0) return null;
|
if (languages.length === 0) return null;
|
||||||
const s: string[] = [];
|
const s: string[] = [];
|
||||||
|
// eslint-disable-next-line github/array-foreach -- Old code before rule was applied
|
||||||
languages.forEach((language: string) => {
|
languages.forEach((language: string) => {
|
||||||
s.push(language.split('-')[0]);
|
s.push(language.split('-')[0]);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ export const declaration: CommandDeclaration = {
|
|||||||
|
|
||||||
export const runtime = (): CommandRuntime => {
|
export const runtime = (): CommandRuntime => {
|
||||||
return {
|
return {
|
||||||
execute: async (_context: CommandContext, field?: string | Array<any>, reverse?: boolean) => {
|
execute: async (_context: CommandContext, field?: string | any[], reverse?: boolean) => {
|
||||||
// field: Sort order's field. undefined means switching a field.
|
// field: Sort order's field. undefined means switching a field.
|
||||||
// reverse: whether the sort order is reversed or not. undefined means toggling.
|
// reverse: whether the sort order is reversed or not. undefined means toggling.
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import { PasswordInput } from '../PasswordInput/PasswordInput';
|
|||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
themeId: number;
|
themeId: number;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
dispatch: Function;
|
dispatch: Function;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ function getPluginCommandNames(plugins: PluginStates): string[] {
|
|||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
function createPluginMenuTree(label: string, menuItems: MenuItem[], onMenuItemClick: Function) {
|
function createPluginMenuTree(label: string, menuItems: MenuItem[], onMenuItemClick: Function) {
|
||||||
const output: any = {
|
const output: any = {
|
||||||
label: label,
|
label: label,
|
||||||
@@ -108,6 +109,7 @@ const useSwitchProfileMenuItems = (profileConfig: ProfileConfig, menuItemDic: an
|
|||||||
};
|
};
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
dispatch: Function;
|
dispatch: Function;
|
||||||
menuItemProps: any;
|
menuItemProps: any;
|
||||||
routeName: string;
|
routeName: string;
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ interface MultiNoteActionsProps {
|
|||||||
themeId: number;
|
themeId: number;
|
||||||
selectedNoteIds: string[];
|
selectedNoteIds: string[];
|
||||||
notes: any[];
|
notes: any[];
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
dispatch: Function;
|
dispatch: Function;
|
||||||
watchedNoteFiles: string[];
|
watchedNoteFiles: string[];
|
||||||
plugins: PluginStates;
|
plugins: PluginStates;
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ interface NoteContentPropertiesDialogProps {
|
|||||||
themeId: number;
|
themeId: number;
|
||||||
text: string;
|
text: string;
|
||||||
markupLanguage: number;
|
markupLanguage: number;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
onClose: Function;
|
onClose: Function;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -28,6 +29,7 @@ function markupToHtml() {
|
|||||||
return markupToHtml_;
|
return markupToHtml_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
function countElements(text: string, wordSetter: Function, characterSetter: Function, characterNoSpaceSetter: Function, lineSetter: Function) {
|
function countElements(text: string, wordSetter: Function, characterSetter: Function, characterNoSpaceSetter: Function, lineSetter: Function) {
|
||||||
Countable.count(text, (counter: any) => {
|
Countable.count(text, (counter: any) => {
|
||||||
wordSetter(counter.words);
|
wordSetter(counter.words);
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ function CodeMirror(props: NoteBodyEditorProps, ref: any) {
|
|||||||
const editorRef = useRef(null);
|
const editorRef = useRef(null);
|
||||||
const rootRef = useRef(null);
|
const rootRef = useRef(null);
|
||||||
const webviewRef = useRef(null);
|
const webviewRef = useRef(null);
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
const props_onChangeRef = useRef<Function>(null);
|
const props_onChangeRef = useRef<Function>(null);
|
||||||
props_onChangeRef.current = props.onChange;
|
props_onChangeRef.current = props.onChange;
|
||||||
|
|
||||||
@@ -863,6 +864,7 @@ function CodeMirror(props: NoteBodyEditorProps, ref: any) {
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line github/array-foreach -- Old code before rule was applied
|
||||||
menuUtils.pluginContextMenuItems(props.plugins, MenuItemLocation.EditorContextMenu).forEach((item: any) => {
|
menuUtils.pluginContextMenuItems(props.plugins, MenuItemLocation.EditorContextMenu).forEach((item: any) => {
|
||||||
menu.append(new MenuItem(item));
|
menu.append(new MenuItem(item));
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ export default function useKeymap(CodeMirror: any) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Converts a command of the form editor.command to just command
|
// Converts a command of the form editor.command to just command
|
||||||
function editorCommandToCodeMirror(command: String) {
|
function editorCommandToCodeMirror(command: string) {
|
||||||
return command.slice(7); // 7 is the length of editor.
|
return command.slice(7); // 7 is the length of editor.
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,7 +38,7 @@ export default function useKeymap(CodeMirror: any) {
|
|||||||
// CodeMirror requires a - between keys while Electron want's a +
|
// CodeMirror requires a - between keys while Electron want's a +
|
||||||
// CodeMirror doesn't recognize Option (it uses Alt instead)
|
// CodeMirror doesn't recognize Option (it uses Alt instead)
|
||||||
// CodeMirror requires Shift to be first
|
// CodeMirror requires Shift to be first
|
||||||
function normalizeAccelerator(accelerator: String) {
|
function normalizeAccelerator(accelerator: string) {
|
||||||
const command = accelerator.replace(/\+/g, '-').replace('Option', 'Alt');
|
const command = accelerator.replace(/\+/g, '-').replace('Option', 'Alt');
|
||||||
// From here is taken out of codemirror/lib/codemirror.js
|
// From here is taken out of codemirror/lib/codemirror.js
|
||||||
const parts = command.split(/-(?!$)/);
|
const parts = command.split(/-(?!$)/);
|
||||||
@@ -89,6 +89,7 @@ export default function useKeymap(CodeMirror: any) {
|
|||||||
function registerKeymap() {
|
function registerKeymap() {
|
||||||
const keymapItems = KeymapService.instance().getKeymapItems();
|
const keymapItems = KeymapService.instance().getKeymapItems();
|
||||||
// Register all commands with the codemirror editor
|
// Register all commands with the codemirror editor
|
||||||
|
// eslint-disable-next-line github/array-foreach -- Old code before rule was applied
|
||||||
keymapItems.forEach((key) => { registerJoplinCommand(key); });
|
keymapItems.forEach((key) => { registerJoplinCommand(key); });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { useCallback, useRef } from 'react';
|
import { useCallback, useRef } from 'react';
|
||||||
import shim from '@joplin/lib/shim';
|
import shim from '@joplin/lib/shim';
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
export default function useScrollHandler(editorRef: any, webviewRef: any, onScroll: Function) {
|
export default function useScrollHandler(editorRef: any, webviewRef: any, onScroll: Function) {
|
||||||
const scrollTimeoutId_ = useRef<any>(null);
|
const scrollTimeoutId_ = useRef<any>(null);
|
||||||
const scrollPercent_ = useRef(0);
|
const scrollPercent_ = useRef(0);
|
||||||
|
|||||||
@@ -905,9 +905,11 @@ const TinyMCE = (props: NoteBodyEditorProps, ref: any) => {
|
|||||||
// Need to save the onChange handler to a ref to make sure
|
// Need to save the onChange handler to a ref to make sure
|
||||||
// we call the current one from setTimeout.
|
// we call the current one from setTimeout.
|
||||||
// https://github.com/facebook/react/issues/14010#issuecomment-433788147
|
// https://github.com/facebook/react/issues/14010#issuecomment-433788147
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
const props_onChangeRef = useRef<Function>();
|
const props_onChangeRef = useRef<Function>();
|
||||||
props_onChangeRef.current = props.onChange;
|
props_onChangeRef.current = props.onChange;
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
const prop_htmlToMarkdownRef = useRef<Function>();
|
const prop_htmlToMarkdownRef = useRef<Function>();
|
||||||
prop_htmlToMarkdownRef.current = props.htmlToMarkdown;
|
prop_htmlToMarkdownRef.current = props.htmlToMarkdown;
|
||||||
|
|
||||||
@@ -1106,7 +1108,12 @@ const TinyMCE = (props: NoteBodyEditorProps, ref: any) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function onPasteAsText() {
|
function onPasteAsText() {
|
||||||
pasteAsPlainText(null);
|
// clipboard.readText returns Markdown instead of text when copying content from
|
||||||
|
// the Rich Text Editor. When the user "Paste as text" he does not expect to see
|
||||||
|
// anything besides text, that is why we are stripping here before pasting
|
||||||
|
// https://github.com/laurent22/joplin/pull/8351
|
||||||
|
const clipboardWithoutMarkdown = stripMarkup(MarkupToHtml.MARKUP_LANGUAGE_MARKDOWN, clipboard.readText());
|
||||||
|
pasteAsPlainText(clipboardWithoutMarkdown);
|
||||||
}
|
}
|
||||||
|
|
||||||
editor.on(TinyMceEditorEvents.KeyUp, onKeyUp);
|
editor.on(TinyMceEditorEvents.KeyUp, onKeyUp);
|
||||||
|
|||||||
@@ -8,12 +8,12 @@ module.exports = [
|
|||||||
"de",
|
"de",
|
||||||
"el",
|
"el",
|
||||||
"eo",
|
"eo",
|
||||||
|
"es",
|
||||||
"es_ES",
|
"es_ES",
|
||||||
"es_MX",
|
"es_MX",
|
||||||
"es",
|
|
||||||
"eu",
|
"eu",
|
||||||
"fa_IR",
|
|
||||||
"fa",
|
"fa",
|
||||||
|
"fa_IR",
|
||||||
"fi",
|
"fi",
|
||||||
"fr_FR",
|
"fr_FR",
|
||||||
"gl",
|
"gl",
|
||||||
@@ -21,8 +21,8 @@ module.exports = [
|
|||||||
"hr",
|
"hr",
|
||||||
"hu_HU",
|
"hu_HU",
|
||||||
"id",
|
"id",
|
||||||
"it_IT",
|
|
||||||
"it",
|
"it",
|
||||||
|
"it_IT",
|
||||||
"ja",
|
"ja",
|
||||||
"kk",
|
"kk",
|
||||||
"ko_KR",
|
"ko_KR",
|
||||||
@@ -32,18 +32,18 @@ module.exports = [
|
|||||||
"pl",
|
"pl",
|
||||||
"pt_BR",
|
"pt_BR",
|
||||||
"pt_PT",
|
"pt_PT",
|
||||||
"ro_RO",
|
|
||||||
"ro",
|
"ro",
|
||||||
|
"ro_RO",
|
||||||
"ru",
|
"ru",
|
||||||
"sk",
|
"sk",
|
||||||
"sl_SI",
|
|
||||||
"sl",
|
"sl",
|
||||||
|
"sl_SI",
|
||||||
"sv_SE",
|
"sv_SE",
|
||||||
"ta_IN",
|
|
||||||
"ta",
|
"ta",
|
||||||
|
"ta_IN",
|
||||||
"th_TH",
|
"th_TH",
|
||||||
"tr_TR",
|
|
||||||
"tr",
|
"tr",
|
||||||
|
"tr_TR",
|
||||||
"uk",
|
"uk",
|
||||||
"vi",
|
"vi",
|
||||||
"zh_CN",
|
"zh_CN",
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ function findBlockSource(node: any): SourceInfo {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function newBlockSource(language: string = '', content: string = '', previousSource: SourceInfo = null): SourceInfo {
|
function newBlockSource(language = '', content = '', previousSource: SourceInfo = null): SourceInfo {
|
||||||
let fence = '```';
|
let fence = '```';
|
||||||
|
|
||||||
if (language === 'katex') {
|
if (language === 'katex') {
|
||||||
@@ -77,6 +77,7 @@ function editableInnerHtml(html: string): string {
|
|||||||
return editable[0].innerHTML;
|
return editable[0].innerHTML;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
export default function openEditDialog(editor: any, markupToHtml: any, dispatchDidUpdate: Function, editable: any) {
|
export default function openEditDialog(editor: any, markupToHtml: any, dispatchDidUpdate: Function, editable: any) {
|
||||||
const source = editable ? findBlockSource(editable) : newBlockSource();
|
const source = editable ? findBlockSource(editable) : newBlockSource();
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ interface ContextMenuActionOptions {
|
|||||||
|
|
||||||
const contextMenuActionOptions: ContextMenuActionOptions = { current: null };
|
const contextMenuActionOptions: ContextMenuActionOptions = { current: null };
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
export default function(editor: any, plugins: PluginStates, dispatch: Function) {
|
export default function(editor: any, plugins: PluginStates, dispatch: Function) {
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!editor) return () => {};
|
if (!editor) return () => {};
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import shim from '@joplin/lib/shim';
|
|||||||
|
|
||||||
interface HookDependencies {
|
interface HookDependencies {
|
||||||
editor: any;
|
editor: any;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
onScroll: Function;
|
onScroll: Function;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,8 @@ async function saveFileData(data: any, filename: string) {
|
|||||||
await writeFile(newFilePath, data);
|
await writeFile(newFilePath, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function openItemById(itemId: string, dispatch: Function, hash: string = '') {
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
|
export async function openItemById(itemId: string, dispatch: Function, hash = '') {
|
||||||
|
|
||||||
const item = await BaseItem.loadItemById(itemId);
|
const item = await BaseItem.loadItemById(itemId);
|
||||||
|
|
||||||
@@ -68,6 +69,7 @@ export async function openItemById(itemId: string, dispatch: Function, hash: str
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
export function menuItems(dispatch: Function): ContextMenuItems {
|
export function menuItems(dispatch: Function): ContextMenuItems {
|
||||||
return {
|
return {
|
||||||
open: {
|
open: {
|
||||||
@@ -194,6 +196,7 @@ export function menuItems(dispatch: Function): ContextMenuItems {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
export default async function contextMenu(options: ContextMenuOptions, dispatch: Function) {
|
export default async function contextMenu(options: ContextMenuOptions, dispatch: Function) {
|
||||||
const menu = new Menu();
|
const menu = new Menu();
|
||||||
|
|
||||||
|
|||||||
@@ -17,14 +17,18 @@ export interface ContextMenuOptions {
|
|||||||
linkToCopy: string;
|
linkToCopy: string;
|
||||||
textToCopy: string;
|
textToCopy: string;
|
||||||
htmlToCopy: string;
|
htmlToCopy: string;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
insertContent: Function;
|
insertContent: Function;
|
||||||
isReadOnly?: boolean;
|
isReadOnly?: boolean;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
fireEditorEvent: Function;
|
fireEditorEvent: Function;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ContextMenuItem {
|
export interface ContextMenuItem {
|
||||||
label: string;
|
label: string;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
onAction: Function;
|
onAction: Function;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
isActive: Function;
|
isActive: Function;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ export interface NoteEditorProps {
|
|||||||
// style: any;
|
// style: any;
|
||||||
noteId: string;
|
noteId: string;
|
||||||
themeId: number;
|
themeId: number;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
dispatch: Function;
|
dispatch: Function;
|
||||||
selectedNoteIds: string[];
|
selectedNoteIds: string[];
|
||||||
selectedFolderId: string;
|
selectedFolderId: string;
|
||||||
@@ -59,9 +60,11 @@ export interface NoteBodyEditorProps {
|
|||||||
onMessage(event: any): void;
|
onMessage(event: any): void;
|
||||||
onScroll(event: any): void;
|
onScroll(event: any): void;
|
||||||
markupToHtml: (markupLanguage: MarkupLanguage, markup: string, options: MarkupToHtmlOptions)=> Promise<RenderResult>;
|
markupToHtml: (markupLanguage: MarkupLanguage, markup: string, options: MarkupToHtmlOptions)=> Promise<RenderResult>;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
htmlToMarkdown: Function;
|
htmlToMarkdown: Function;
|
||||||
allAssets: (markupLanguage: MarkupLanguage, options: AllAssetsOptions)=> Promise<RenderResultPluginAsset[]>;
|
allAssets: (markupLanguage: MarkupLanguage, options: AllAssetsOptions)=> Promise<RenderResultPluginAsset[]>;
|
||||||
disabled: boolean;
|
disabled: boolean;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
dispatch: Function;
|
dispatch: Function;
|
||||||
noteToolbar: any;
|
noteToolbar: any;
|
||||||
setLocalSearchResultCount(count: number): void;
|
setLocalSearchResultCount(count: number): void;
|
||||||
@@ -70,6 +73,7 @@ export interface NoteBodyEditorProps {
|
|||||||
keyboardMode: string;
|
keyboardMode: string;
|
||||||
resourceInfos: ResourceInfos;
|
resourceInfos: ResourceInfos;
|
||||||
locale: string;
|
locale: string;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
onDrop: Function;
|
onDrop: Function;
|
||||||
noteToolbarButtonInfos: ToolbarButtonInfo[];
|
noteToolbarButtonInfos: ToolbarButtonInfo[];
|
||||||
plugins: PluginStates;
|
plugins: PluginStates;
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ interface HookDependencies {
|
|||||||
onAfterLoad(event: OnLoadEvent): void;
|
onAfterLoad(event: OnLoadEvent): void;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
function installResourceChangeHandler(onResourceChangeHandler: Function) {
|
function installResourceChangeHandler(onResourceChangeHandler: Function) {
|
||||||
ResourceFetcher.instance().on('downloadComplete', onResourceChangeHandler);
|
ResourceFetcher.instance().on('downloadComplete', onResourceChangeHandler);
|
||||||
ResourceFetcher.instance().on('downloadStarted', onResourceChangeHandler);
|
ResourceFetcher.instance().on('downloadStarted', onResourceChangeHandler);
|
||||||
@@ -35,6 +36,7 @@ function installResourceChangeHandler(onResourceChangeHandler: Function) {
|
|||||||
ResourceEditWatcher.instance().on('resourceChange', onResourceChangeHandler);
|
ResourceEditWatcher.instance().on('resourceChange', onResourceChangeHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
function uninstallResourceChangeHandler(onResourceChangeHandler: Function) {
|
function uninstallResourceChangeHandler(onResourceChangeHandler: Function) {
|
||||||
ResourceFetcher.instance().off('downloadComplete', onResourceChangeHandler);
|
ResourceFetcher.instance().off('downloadComplete', onResourceChangeHandler);
|
||||||
ResourceFetcher.instance().off('downloadStarted', onResourceChangeHandler);
|
ResourceFetcher.instance().off('downloadStarted', onResourceChangeHandler);
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import ResourceFetcher from '@joplin/lib/services/ResourceFetcher';
|
|||||||
import { reg } from '@joplin/lib/registry';
|
import { reg } from '@joplin/lib/registry';
|
||||||
const bridge = require('@electron/remote').require('./bridge').default;
|
const bridge = require('@electron/remote').require('./bridge').default;
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
export default function useMessageHandler(scrollWhenReady: any, setScrollWhenReady: Function, editorRef: any, setLocalSearchResultCount: Function, dispatch: Function, formNote: FormNote) {
|
export default function useMessageHandler(scrollWhenReady: any, setScrollWhenReady: Function, editorRef: any, setLocalSearchResultCount: Function, dispatch: Function, formNote: FormNote) {
|
||||||
return useCallback(async (event: any) => {
|
return useCallback(async (event: any) => {
|
||||||
const msg = event.channel ? event.channel : '';
|
const msg = event.channel ? event.channel : '';
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ function defaultSearchMarkers(): SearchMarkers {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
export default function useSearchMarkers(showLocalSearch: boolean, localSearchMarkerOptions: Function, searches: any[], selectedSearchId: string, highlightedWords: any[] = []) {
|
export default function useSearchMarkers(showLocalSearch: boolean, localSearchMarkerOptions: Function, searches: any[], selectedSearchId: string, highlightedWords: any[] = []) {
|
||||||
return useMemo((): SearchMarkers => {
|
return useMemo((): SearchMarkers => {
|
||||||
if (showLocalSearch) return localSearchMarkerOptions();
|
if (showLocalSearch) return localSearchMarkerOptions();
|
||||||
|
|||||||
@@ -15,15 +15,20 @@ const commandsWithDependencies = [
|
|||||||
|
|
||||||
interface HookDependencies {
|
interface HookDependencies {
|
||||||
formNote: FormNote;
|
formNote: FormNote;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
setShowLocalSearch: Function;
|
setShowLocalSearch: Function;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
dispatch: Function;
|
dispatch: Function;
|
||||||
noteSearchBarRef: any;
|
noteSearchBarRef: any;
|
||||||
editorRef: any;
|
editorRef: any;
|
||||||
titleInputRef: any;
|
titleInputRef: any;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
saveNoteAndWait: Function;
|
saveNoteAndWait: Function;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
setFormNote: Function;
|
setFormNote: Function;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
function editorCommandRuntime(declaration: CommandDeclaration, editorRef: any, setFormNote: Function): CommandRuntime {
|
function editorCommandRuntime(declaration: CommandDeclaration, editorRef: any, setFormNote: Function): CommandRuntime {
|
||||||
const markdownEditorOnly = !Object.keys(joplinCommandToTinyMceCommands).includes(declaration.name);
|
const markdownEditorOnly = !Object.keys(joplinCommandToTinyMceCommands).includes(declaration.name);
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ export interface Props {
|
|||||||
themeId: any;
|
themeId: any;
|
||||||
selectedNoteIds: string[];
|
selectedNoteIds: string[];
|
||||||
notes: NoteEntity[];
|
notes: NoteEntity[];
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
dispatch: Function;
|
dispatch: Function;
|
||||||
watchedNoteFiles: any[];
|
watchedNoteFiles: any[];
|
||||||
plugins: PluginStates;
|
plugins: PluginStates;
|
||||||
|
|||||||
@@ -13,7 +13,9 @@ const formatcoords = require('formatcoords');
|
|||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
noteId: string;
|
noteId: string;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
onClose: Function;
|
onClose: Function;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
onRevisionLinkClick: Function;
|
onRevisionLinkClick: Function;
|
||||||
themeId: number;
|
themeId: number;
|
||||||
}
|
}
|
||||||
@@ -210,6 +212,7 @@ class NotePropertiesDialog extends React.Component<Props, State> {
|
|||||||
public async saveProperty() {
|
public async saveProperty() {
|
||||||
if (!this.state.editedKey) return;
|
if (!this.state.editedKey) return;
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
return new Promise((resolve: Function) => {
|
return new Promise((resolve: Function) => {
|
||||||
const newFormNote = { ...this.state.formNote };
|
const newFormNote = { ...this.state.formNote };
|
||||||
|
|
||||||
@@ -234,6 +237,7 @@ class NotePropertiesDialog extends React.Component<Props, State> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public async cancelProperty() {
|
public async cancelProperty() {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
return new Promise((resolve: Function) => {
|
return new Promise((resolve: Function) => {
|
||||||
this.okButton.current.focus();
|
this.okButton.current.focus();
|
||||||
this.setState({
|
this.setState({
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import shared from '@joplin/lib/components/shared/note-screen-shared';
|
|||||||
interface Props {
|
interface Props {
|
||||||
themeId: number;
|
themeId: number;
|
||||||
noteId: string;
|
noteId: string;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
onBack: Function;
|
onBack: Function;
|
||||||
customCss: string;
|
customCss: string;
|
||||||
}
|
}
|
||||||
@@ -36,6 +37,7 @@ interface State {
|
|||||||
class NoteRevisionViewerComponent extends React.PureComponent<Props, State> {
|
class NoteRevisionViewerComponent extends React.PureComponent<Props, State> {
|
||||||
|
|
||||||
private viewerRef_: any;
|
private viewerRef_: any;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
private helpButton_onClick: Function;
|
private helpButton_onClick: Function;
|
||||||
|
|
||||||
public constructor(props: Props) {
|
public constructor(props: Props) {
|
||||||
|
|||||||
@@ -4,9 +4,13 @@ import { _ } from '@joplin/lib/locale';
|
|||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
themeId: number;
|
themeId: number;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
onNext: Function;
|
onNext: Function;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
onPrevious: Function;
|
onPrevious: Function;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
onClose: Function;
|
onClose: Function;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
onChange: Function;
|
onChange: Function;
|
||||||
query: string;
|
query: string;
|
||||||
searching: boolean;
|
searching: boolean;
|
||||||
|
|||||||
@@ -3,7 +3,9 @@ import * as React from 'react';
|
|||||||
import { reg } from '@joplin/lib/registry';
|
import { reg } from '@joplin/lib/registry';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
onDomReady: Function;
|
onDomReady: Function;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
onIpcMessage: Function;
|
onIpcMessage: Function;
|
||||||
viewerStyle: any;
|
viewerStyle: any;
|
||||||
contentMaxWidth?: number;
|
contentMaxWidth?: number;
|
||||||
@@ -12,8 +14,8 @@ interface Props {
|
|||||||
|
|
||||||
export default class NoteTextViewerComponent extends React.Component<Props, any> {
|
export default class NoteTextViewerComponent extends React.Component<Props, any> {
|
||||||
|
|
||||||
private initialized_: boolean = false;
|
private initialized_ = false;
|
||||||
private domReady_: boolean = false;
|
private domReady_ = false;
|
||||||
private webviewRef_: any;
|
private webviewRef_: any;
|
||||||
private webviewListeners_: any = null;
|
private webviewListeners_: any = null;
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ const IFrame = styled.iframe`
|
|||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
themeId: number;
|
themeId: number;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
dispatch: Function;
|
dispatch: Function;
|
||||||
resource: any;
|
resource: any;
|
||||||
pageNo: number;
|
pageNo: number;
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ interface Props {
|
|||||||
visible: boolean;
|
visible: boolean;
|
||||||
style: any;
|
style: any;
|
||||||
buttons: any[];
|
buttons: any[];
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
onClose: Function;
|
onClose: Function;
|
||||||
inputType: string;
|
inputType: string;
|
||||||
description: string;
|
description: string;
|
||||||
@@ -26,7 +27,7 @@ export default class PromptDialog extends React.Component<Props, any> {
|
|||||||
private focusInput_: boolean;
|
private focusInput_: boolean;
|
||||||
private styles_: any;
|
private styles_: any;
|
||||||
private styleKey_: string;
|
private styleKey_: string;
|
||||||
private menuIsOpened_: boolean = false;
|
private menuIsOpened_ = false;
|
||||||
|
|
||||||
public constructor(props: Props) {
|
public constructor(props: Props) {
|
||||||
super(props);
|
super(props);
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ interface Props {
|
|||||||
onResize(event: OnResizeEvent): void;
|
onResize(event: OnResizeEvent): void;
|
||||||
width?: number;
|
width?: number;
|
||||||
height?: number;
|
height?: number;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
renderItem: Function;
|
renderItem: Function;
|
||||||
onMoveButtonClick(event: MoveButtonClickEvent): void;
|
onMoveButtonClick(event: MoveButtonClickEvent): void;
|
||||||
moveMode: boolean;
|
moveMode: boolean;
|
||||||
@@ -32,6 +33,7 @@ function itemVisible(item: LayoutItem, moveMode: boolean) {
|
|||||||
return item.visible !== false;
|
return item.visible !== false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
function renderContainer(item: LayoutItem, parent: LayoutItem | null, sizes: LayoutItemSizes, resizedItemMaxSize: Size | null, onResizeStart: Function, onResize: Function, onResizeStop: Function, children: any[], isLastChild: boolean, moveMode: boolean): any {
|
function renderContainer(item: LayoutItem, parent: LayoutItem | null, sizes: LayoutItemSizes, resizedItemMaxSize: Size | null, onResizeStart: Function, onResize: Function, onResizeStop: Function, children: any[], isLastChild: boolean, moveMode: boolean): any {
|
||||||
const style: any = {
|
const style: any = {
|
||||||
display: itemVisible(item, moveMode) ? 'flex' : 'none',
|
display: itemVisible(item, moveMode) ? 'flex' : 'none',
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ export default function iterateItems(layout: LayoutItem, callback: ItemItemCallb
|
|||||||
const result = callback(0, layout, null);
|
const result = callback(0, layout, null);
|
||||||
if (result === false) return;
|
if (result === false) return;
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
function recurseFind(item: LayoutItem, callback: Function): boolean {
|
function recurseFind(item: LayoutItem, callback: Function): boolean {
|
||||||
if (item.children) {
|
if (item.children) {
|
||||||
for (let childIndex = 0; childIndex < item.children.length; childIndex++) {
|
for (let childIndex = 0; childIndex < item.children.length; childIndex++) {
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ export function calculateMaxSizeAvailableForItem(item: LayoutItem, parent: Layou
|
|||||||
return availableSize;
|
return availableSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function useLayoutItemSizes(layout: LayoutItem, makeAllVisible: boolean = false) {
|
export default function useLayoutItemSizes(layout: LayoutItem, makeAllVisible = false) {
|
||||||
return useMemo(() => {
|
return useMemo(() => {
|
||||||
let sizes: LayoutItemSizes = {};
|
let sizes: LayoutItemSizes = {};
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ interface Style {
|
|||||||
interface Props {
|
interface Props {
|
||||||
themeId: number;
|
themeId: number;
|
||||||
style: Style;
|
style: Style;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
dispatch: Function;
|
dispatch: Function;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||