mirror of https://github.com/joplin/website.git
parent
1168ebf6d1
commit
bd0dbab159
|
@ -0,0 +1,562 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<!--
|
||||
|
||||
!!! WARNING !!!
|
||||
|
||||
This file was auto-generated from readme/coding_style.md and any manual change
|
||||
made to it will be overwritten. To make a change to this file please modify
|
||||
the source Markdown file:
|
||||
|
||||
https://github.com/laurent22/joplin/blob/dev/readme/coding_style.md
|
||||
|
||||
-->
|
||||
|
||||
<head>
|
||||
<!-- Google Tag Manager -->
|
||||
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
||||
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
||||
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
||||
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
||||
})(window,document,'script','dataLayer','GTM-579DTGX');</script>
|
||||
<!-- End Google Tag Manager --><!-- Monthly/Yearly plan A/B testing -->
|
||||
<!--
|
||||
<script src="https://www.googleoptimize.com/optimize.js?id=OPT-PW3ZPK3"></script>
|
||||
-->
|
||||
|
||||
<!-- Donate button A/B testing -->
|
||||
<!--
|
||||
<script async src="https://www.googleoptimize.com/optimize.js?id=OPT-PW3ZPK3"></script>
|
||||
--> <meta
|
||||
charset="utf-8"
|
||||
http-equiv="X-UA-Compatible"
|
||||
content="IE=edge,chrome=1"
|
||||
/>
|
||||
<link rel="icon" href="/images/favicon.png" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="theme-color" content="#000000" />
|
||||
<meta name="description" content="Coding style is mostly enforced by a pre-commit hook that runs eslint. This hook is installed whenever running yarn install on any of the application directory. If for some reason the pre-commit ho..." />
|
||||
<meta name="twitter:card" content="summary" />
|
||||
<meta name="twitter:site" content="@joplinapp" />
|
||||
<meta property="og:url" content="https://joplinapp.org/coding_style/index.html" />
|
||||
<meta property="og:title" content="Coding style" />
|
||||
<meta property="twitter:title" content="Coding style" />
|
||||
<meta property="og:description" content="Coding style is mostly enforced by a pre-commit hook that runs eslint. This hook is installed whenever running yarn install on any of the application directory. If for some reason the pre-commit ho..." />
|
||||
<meta property="twitter:description" content="Coding style is mostly enforced by a pre-commit hook that runs eslint. This hook is installed whenever running yarn install on any of the application directory. If for some reason the pre-commit ho..." />
|
||||
<link rel="alternate" type="application/rss+xml" title="Joplin RSS feed" href="https://joplinapp.org/rss.xml" /> <link
|
||||
rel="stylesheet"
|
||||
href="/css/bootstrap5.0.2.min.css"
|
||||
as="style"
|
||||
/>
|
||||
<link rel="stylesheet" href="/css/fontawesome-all.min.css?h=ecd507b3125edc4d2a03aa6ae5d07da9">
|
||||
<link
|
||||
href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600;700&display=swap"
|
||||
rel="stylesheet"
|
||||
as="style"
|
||||
media="all"
|
||||
onload="this.media='all'; this.onload = null"
|
||||
/>
|
||||
<link rel="stylesheet" href="/css/site.css?h=48d853dd389c4aa024d008a0719918bf" as="style" />
|
||||
<title>Coding style | Joplin</title>
|
||||
|
||||
<script
|
||||
src="/js/jquery-3.6.0.min.js"
|
||||
rel="preload"
|
||||
as="script"
|
||||
></script>
|
||||
</head>
|
||||
<body class="website-env-prod">
|
||||
<!-- Google Tag Manager (noscript) -->
|
||||
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-579DTGX"
|
||||
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
|
||||
<!-- End Google Tag Manager (noscript) -->
|
||||
<div class="container-fluid generic-template -page" id="main-container">
|
||||
|
||||
<div class=" navbar-main white-bg" id="nav-section">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-3">
|
||||
<a href="/">
|
||||
<img
|
||||
src="/images/logo-text-blue.svg"
|
||||
alt=""
|
||||
id="top-logo"
|
||||
width="180"
|
||||
/>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-9 text-right d-none d-md-block">
|
||||
<a href="https://twitter.com/joplinapp" title="Joplin Twitter feed" class="fw500"><i class="fab fa-twitter"></i></a> <a href="/news/" class="fw500">News</a>
|
||||
<a href="/help/" class="fw500">Help</a>
|
||||
<a href="https://discourse.joplinapp.org/" class="fw500">Forum</a>
|
||||
<a href="/plans/" class="button-link btn-trans plans-button">Joplin Cloud</a><a class="button-link btn-blue sponsor-button" href="/donate">
|
||||
<i class="fas fa-heart heart-full"></i><i class="far fa-heart heart-line"></i><span class="sponsor-button-label"> Support us</span>
|
||||
</a> </div>
|
||||
<div class="col-9 text-right d-block d-md-none navbar-mobile-content">
|
||||
<a href="https://twitter.com/joplinapp" title="Joplin Twitter feed" class="fw500"><i class="fab fa-twitter"></i></a><a class="button-link btn-blue sponsor-button" href="/donate">
|
||||
<i class="fas fa-heart heart-full"></i><i class="far fa-heart heart-line"></i><span class="sponsor-button-label"> Support us</span>
|
||||
</a>
|
||||
<span class="pointer"
|
||||
><img
|
||||
src="/images/mobile-menu-black-open-icon.png"
|
||||
id="open-menu-mobile"
|
||||
alt=""
|
||||
/></span>
|
||||
|
||||
|
||||
<div id="menu-mobile">
|
||||
<div>
|
||||
<div class="text-right">
|
||||
<img
|
||||
src="/images/close-icon.png"
|
||||
alt=""
|
||||
class="pointer"
|
||||
id="close-menu-mobile"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="text-center menu-mobile-top">
|
||||
<a href="/news/" class="fw500 mobile-menu-link">News</a>
|
||||
<a href="/help/" class="fw500 mobile-menu-link">Help</a>
|
||||
<a href="https://discourse.joplinapp.org/" class="fw500 mobile-menu-link">Forum</a>
|
||||
</div>
|
||||
|
||||
<div class="menu-mobile-buttons">
|
||||
<a href="/plans/" class="button-link btn-trans plans-button">Joplin Cloud</a><a class="button-link btn-blue sponsor-button" href="/donate">
|
||||
<i class="fas fa-heart heart-full"></i><i class="far fa-heart heart-line"></i><span class="sponsor-button-label"> Support us</span>
|
||||
</a> </div>
|
||||
</div>
|
||||
|
||||
<div id="toc-mobile"><div><ul>
|
||||
<li>
|
||||
<p>Applications</p>
|
||||
<ul>
|
||||
<li><a href="/desktop/">Desktop application</a></li>
|
||||
<li><a href="/mobile/">Mobile applications</a></li>
|
||||
<li><a href="/terminal/">Terminal application</a></li>
|
||||
<li><a href="/clipper/">Web Clipper</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p>Support</p>
|
||||
<ul>
|
||||
<li><a href="https://discourse.joplinapp.org">Joplin Forum</a></li>
|
||||
<li><a href="/markdown/">Markdown Guide</a></li>
|
||||
<li><a href="/e2ee/">How to enable end-to-end encryption</a></li>
|
||||
<li><a href="/conflict/">What is a conflict?</a></li>
|
||||
<li><a href="/debugging/">How to enable debug mode</a></li>
|
||||
<li><a href="/rich_text_editor/">About the Rich Text editor limitations</a></li>
|
||||
<li><a href="/external_links/">External links</a></li>
|
||||
<li><a href="/faq/">FAQ</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p>Joplin Cloud</p>
|
||||
<ul>
|
||||
<li><a href="/share_notebook/">Sharing a notebook</a></li>
|
||||
<li><a href="/publish_note/">Publishing a note</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p>Joplin API - Get Started</p>
|
||||
<ul>
|
||||
<li><a href="/api/overview/">Joplin API Overview</a></li>
|
||||
<li><a href="/api/get_started/plugins/">Plugin development</a></li>
|
||||
<li><a href="/api/tutorials/toc_plugin/">Plugin tutorial</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p>Joplin API - References</p>
|
||||
<ul>
|
||||
<li><a href="https://joplinapp.org/api/references/plugin_api/classes/joplin.html">Plugin API</a></li>
|
||||
<li><a href="/api/references/rest_api/">Data API</a></li>
|
||||
<li><a href="/api/references/plugin_manifest/">Plugin manifest</a></li>
|
||||
<li><a href="/api/references/plugin_loading_rules/">Plugin loading rules</a></li>
|
||||
<li><a href="/api/references/plugin_theming/">Plugin theming</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p>Development</p>
|
||||
<ul>
|
||||
<li><a href="https://github.com/laurent22/joplin/blob/dev/BUILD.md">How to build the apps</a></li>
|
||||
<li><a href="/technical_spec/">Writing a technical spec</a></li>
|
||||
<li><a href="/spec/desktop_styling/">Desktop application styling</a></li>
|
||||
<li><a href="/spec/history/">Note History spec</a></li>
|
||||
<li><a href="/spec/sync_lock/">Sync Lock spec</a></li>
|
||||
<li><a href="/spec/sync_scroll/">Synchronous Scroll spec</a></li>
|
||||
<li><a href="/spec/plugins/">Plugin Architecture spec</a></li>
|
||||
<li><a href="/spec/search_sorting/">Search Sorting spec</a></li>
|
||||
<li><a href="/spec/e2ee/">E2EE: Technical spec</a></li>
|
||||
<li><a href="/spec/e2ee/workflow/">E2EE: Workflow</a></li>
|
||||
<li><a href="/spec/server_file_url_format/">Server: File URL Format</a></li>
|
||||
<li><a href="/spec/server_delta_sync/">Server: Delta Sync</a></li>
|
||||
<li><a href="/spec/server_sharing/">Server: Sharing</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p>Google Summer of Code 2022</p>
|
||||
<ul>
|
||||
<li><a href="/gsoc2022/">Google Summer of Code 2022</a></li>
|
||||
<li><a href="/gsoc2022/pull_request_guidelines/">How to submit a GSoC pull request</a></li>
|
||||
<li><a href="/gsoc2022/ideas/">Project Ideas</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p>About</p>
|
||||
<ul>
|
||||
<li><a href="/changelog/">Changelog (Desktop App)</a></li>
|
||||
<li><a href="/changelog_android/">Changelog (Android)</a></li>
|
||||
<li><a href="/changelog_ios/">Changelog (iOS)</a></li>
|
||||
<li><a href="/changelog_cli/">Changelog (CLI App)</a></li>
|
||||
<li><a href="/changelog_server/">Changelog (Server)</a></li>
|
||||
<li><a href="/stats/">Stats</a></li>
|
||||
<li><a href="/donate/">Donate</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div></div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12 col-md-12 social-links">
|
||||
<a class="social-link-twitter" href="https://twitter.com/joplinapp" title="Joplin Twitter feed"><i class="fab fa-twitter"></i></a>
|
||||
<a class="social-link-mastodon" href="https://mastodon.social/@joplinapp" title="Joplin Mastodon feed"><i class="fab fa-mastodon"></i></a>
|
||||
<a class="social-link-patreon" href="https://www.patreon.com/joplin" title="Joplin Patreon"><i class="fab fa-patreon"></i></a>
|
||||
<a class="social-link-discord" href="https://discord.gg/VSj7AFHvpq" title="Joplin Discord chat"><i class="fab fa-discord"></i></a>
|
||||
<a class="social-link-reddit" href="https://www.reddit.com/r/joplinapp/" title="Joplin Subreddit"><i class="fab fa-reddit"></i></a>
|
||||
<a class="social-link-github" href="https://github.com/laurent22/joplin/" title="Joplin GitHub repository"><i class="fab fa-github"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<p class="light-blue mobile-menu-link-bottom text-center">
|
||||
Copyright © 2016-2022 Laurent Cozic
|
||||
<br/>
|
||||
<a href="/privacy/" class="fw500">Privacy Policy</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="help-page-container page-coding_style">
|
||||
<div class="container">
|
||||
<div class="row content-wrapper">
|
||||
<div id="toc"><div><ul>
|
||||
<li>
|
||||
<p>Applications</p>
|
||||
<ul>
|
||||
<li><a href="/desktop/">Desktop application</a></li>
|
||||
<li><a href="/mobile/">Mobile applications</a></li>
|
||||
<li><a href="/terminal/">Terminal application</a></li>
|
||||
<li><a href="/clipper/">Web Clipper</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p>Support</p>
|
||||
<ul>
|
||||
<li><a href="https://discourse.joplinapp.org">Joplin Forum</a></li>
|
||||
<li><a href="/markdown/">Markdown Guide</a></li>
|
||||
<li><a href="/e2ee/">How to enable end-to-end encryption</a></li>
|
||||
<li><a href="/conflict/">What is a conflict?</a></li>
|
||||
<li><a href="/debugging/">How to enable debug mode</a></li>
|
||||
<li><a href="/rich_text_editor/">About the Rich Text editor limitations</a></li>
|
||||
<li><a href="/external_links/">External links</a></li>
|
||||
<li><a href="/faq/">FAQ</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p>Joplin Cloud</p>
|
||||
<ul>
|
||||
<li><a href="/share_notebook/">Sharing a notebook</a></li>
|
||||
<li><a href="/publish_note/">Publishing a note</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p>Joplin API - Get Started</p>
|
||||
<ul>
|
||||
<li><a href="/api/overview/">Joplin API Overview</a></li>
|
||||
<li><a href="/api/get_started/plugins/">Plugin development</a></li>
|
||||
<li><a href="/api/tutorials/toc_plugin/">Plugin tutorial</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p>Joplin API - References</p>
|
||||
<ul>
|
||||
<li><a href="https://joplinapp.org/api/references/plugin_api/classes/joplin.html">Plugin API</a></li>
|
||||
<li><a href="/api/references/rest_api/">Data API</a></li>
|
||||
<li><a href="/api/references/plugin_manifest/">Plugin manifest</a></li>
|
||||
<li><a href="/api/references/plugin_loading_rules/">Plugin loading rules</a></li>
|
||||
<li><a href="/api/references/plugin_theming/">Plugin theming</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p>Development</p>
|
||||
<ul>
|
||||
<li><a href="https://github.com/laurent22/joplin/blob/dev/BUILD.md">How to build the apps</a></li>
|
||||
<li><a href="/technical_spec/">Writing a technical spec</a></li>
|
||||
<li><a href="/spec/desktop_styling/">Desktop application styling</a></li>
|
||||
<li><a href="/spec/history/">Note History spec</a></li>
|
||||
<li><a href="/spec/sync_lock/">Sync Lock spec</a></li>
|
||||
<li><a href="/spec/sync_scroll/">Synchronous Scroll spec</a></li>
|
||||
<li><a href="/spec/plugins/">Plugin Architecture spec</a></li>
|
||||
<li><a href="/spec/search_sorting/">Search Sorting spec</a></li>
|
||||
<li><a href="/spec/e2ee/">E2EE: Technical spec</a></li>
|
||||
<li><a href="/spec/e2ee/workflow/">E2EE: Workflow</a></li>
|
||||
<li><a href="/spec/server_file_url_format/">Server: File URL Format</a></li>
|
||||
<li><a href="/spec/server_delta_sync/">Server: Delta Sync</a></li>
|
||||
<li><a href="/spec/server_sharing/">Server: Sharing</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p>Google Summer of Code 2022</p>
|
||||
<ul>
|
||||
<li><a href="/gsoc2022/">Google Summer of Code 2022</a></li>
|
||||
<li><a href="/gsoc2022/pull_request_guidelines/">How to submit a GSoC pull request</a></li>
|
||||
<li><a href="/gsoc2022/ideas/">Project Ideas</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p>About</p>
|
||||
<ul>
|
||||
<li><a href="/changelog/">Changelog (Desktop App)</a></li>
|
||||
<li><a href="/changelog_android/">Changelog (Android)</a></li>
|
||||
<li><a href="/changelog_ios/">Changelog (iOS)</a></li>
|
||||
<li><a href="/changelog_cli/">Changelog (CLI App)</a></li>
|
||||
<li><a href="/changelog_server/">Changelog (Server)</a></li>
|
||||
<li><a href="/stats/">Stats</a></li>
|
||||
<li><a href="/donate/">Donate</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div></div>
|
||||
|
||||
<div class="main-content">
|
||||
<div class="alert alert-danger alert-env-dev" role="alert">
|
||||
Running in prod mode!
|
||||
</div>
|
||||
<div class="donate-links">
|
||||
<p><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=E8JMYD2LQ8MMA&lc=GB&item_name=Joplin+Development&currency_code=EUR&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted"><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/badges/Donate-PayPal-green.svg" alt="Donate using PayPal"></a> <a href="https://github.com/sponsors/laurent22/"><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/badges/GitHub-Badge.svg" alt="Sponsor on GitHub"></a> <a href="https://www.patreon.com/joplin"><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/badges/Patreon-Badge.svg" alt="Become a patron"></a> <a href="https://joplinapp.org/donate/#donations"><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/badges/Donate-IBAN.svg" alt="Donate using IBAN"></a></p>
|
||||
</div>
|
||||
<h1>Coding style<a name="coding-style" href="#coding-style" class="heading-anchor">🔗</a></h1>
|
||||
<p>Coding style is mostly enforced by a pre-commit hook that runs <code>eslint</code>. This hook is installed whenever running <code>yarn install</code> on any of the application directory. If for some reason the pre-commit hook didn't get installed, you can manually install it by running <code>yarn install</code> at the root of the repository.</p>
|
||||
<h2>Use TypeScript for new files<a name="use-typescript-for-new-files" href="#use-typescript-for-new-files" class="heading-anchor">🔗</a></h2>
|
||||
<h3>Creating a new <code>.ts</code> file<a name="creating-a-new-ts-file" href="#creating-a-new-ts-file" class="heading-anchor">🔗</a></h3>
|
||||
<p>Because the TypeScript compiler generates <code>.js</code> files, be sure to add these new <code>.js</code> files to <code>.eslintignore</code> and <code>.gitignore</code>.</p>
|
||||
<p>To do this,</p>
|
||||
<ol>
|
||||
<li>If the TypeScript compiler has already generated a <code>.js</code> file for the new <code>.ts</code> file, delete it.</li>
|
||||
<li>Run <code>yarn run updateIgnored</code> in the root directory of the project (or <code>yarn run postinstall</code>)</li>
|
||||
</ol>
|
||||
<h3>Convert existing <code>.js</code> files to TypeScript before modifying<a name="convert-existing-js-files-to-typescript-before-modifying" href="#convert-existing-js-files-to-typescript-before-modifying" class="heading-anchor">🔗</a></h3>
|
||||
<p>Even if you are <strong>modifying</strong> a file that was originally in JavaScript you should ideally convert it first to TypeScript before modifying it.</p>
|
||||
<p>If this is a large file however please ask first if it needs to be converted. Some very old and large JS files are tricky to convert properly due to poorly defined types, so in some cases it's better to leave that for another day (or another PR).</p>
|
||||
<h2>Filenames<a name="filenames" href="#filenames" class="heading-anchor">🔗</a></h2>
|
||||
<ul>
|
||||
<li><code>camelCase.ts</code>: Files that export multiple things.
|
||||
<ul>
|
||||
<li>Example: <a href="https://github.com/laurent22/joplin/blob/dev/packages/app-desktop/checkForUpdates.ts"><code>checkForUpdates.ts</code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><code>PascalCase.ts</code>: <a href="https://github.com/laurent22/joplin/pull/6607#discussion_r906847156">Only if the file contains a single class, which is the default export.</a></li>
|
||||
<li><code>types.ts</code> or <code>fooTypes.ts</code>: <a href="https://github.com/laurent22/joplin/pull/6607#discussion_r906847156">Shared type definitions</a>
|
||||
<ul>
|
||||
<li>Example : <a href="https://github.com/laurent22/joplin/blob/dev/packages/server/src/utils/types.ts"><code>types.ts</code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2>Use the same case for imported and exported members<a name="use-the-same-case-for-imported-and-exported-members" href="#use-the-same-case-for-imported-and-exported-members" class="heading-anchor">🔗</a></h2>
|
||||
<p>If you create a file that exports a single function called <code>processData()</code>, the file should be named <code>processData.ts</code>. When importing, it should be imported as <code>processData</code>, too. Basically, be consistent with naming, even though JS allows things to be named differently.</p>
|
||||
<p><strong>BAD:</strong></p>
|
||||
<pre><code class="language-ts">// ProcessDATA.ts
|
||||
export default const processData = () => {
|
||||
// ...
|
||||
};
|
||||
|
||||
// foo.ts
|
||||
import doDataProcessing from './ProcessDATA';
|
||||
|
||||
doDataProcessing();
|
||||
...
|
||||
</code></pre>
|
||||
<p><strong>Good:</strong></p>
|
||||
<pre><code class="language-ts">// processData.ts
|
||||
export default const processData = () => {
|
||||
// ...
|
||||
};
|
||||
|
||||
// foo.ts
|
||||
import processData from './processData';
|
||||
|
||||
processData();
|
||||
...
|
||||
</code></pre>
|
||||
<h2>Use <code>camelCase</code> for <code>const</code>ants in new code<a name="use-camelcase-for-const-ants-in-new-code" href="#use-camelcase-for-const-ants-in-new-code" class="heading-anchor">🔗</a></h2>
|
||||
<p><strong>BAD:</strong></p>
|
||||
<pre><code class="language-ts">// Bad! Don't use in new code!
|
||||
const GRAVITY_ACCEL = 9.8;
|
||||
</code></pre>
|
||||
<p><strong>Good:</strong></p>
|
||||
<pre><code class="language-ts">const gravityAccel = 9.8;
|
||||
</code></pre>
|
||||
<h2>Indent using <code>tab</code>s<a name="indent-using-tab-s" href="#indent-using-tab-s" class="heading-anchor">🔗</a></h2>
|
||||
<p><strong>VSCode</strong>: In <code>vscode</code>, be sure to check whether new files are created with <code>tab</code> or <code>space</code> indentation! <a href="https://code.visualstudio.com/docs/editor/codebasics#_autodetection">Spaces can be converted to tabs using the command palette.</a></p>
|
||||
<h2>Use strict equality<a name="use-strict-equality" href="#use-strict-equality" class="heading-anchor">🔗</a></h2>
|
||||
<p>Use <code>===</code> instead of <code>==</code>.</p>
|
||||
<p>Although the TypeScript compiler <em>will</em> give error messages if two different types are compared with <code>==</code> (e.g. <code>number == boolean</code>), its compiler error <a href="https://github.com/microsoft/TypeScript/issues/26592">messages in this case can be misleading</a>.</p>
|
||||
<h3>See also<a name="see-also" href="#see-also" class="heading-anchor">🔗</a></h3>
|
||||
<ul>
|
||||
<li><a href="https://basarat.gitbook.io/typescript/styleguide#or">Unofficial TypeScript style guide, <code>==</code> vs <code>===</code></a></li>
|
||||
<li><a href="https://stackoverflow.com/a/60669874">More about <code>==</code> vs <code>===</code> in TypeScript.</a></li>
|
||||
</ul>
|
||||
<h2>Declare variables just before their usage<a name="declare-variables-just-before-their-usage" href="#declare-variables-just-before-their-usage" class="heading-anchor">🔗</a></h2>
|
||||
<p><strong>BAD:</strong></p>
|
||||
<pre><code class="language-ts">// Bad!
|
||||
let foo, bar;
|
||||
|
||||
const doThings = () => {
|
||||
// do things unrelated to foo, bar
|
||||
};
|
||||
|
||||
// Do things involving foo and bar
|
||||
foo = Math.random();
|
||||
bar = foo + Math.random() / 100;
|
||||
foo += Math.sin(bar + Math.tan(foo));
|
||||
...
|
||||
</code></pre>
|
||||
<p><strong>Good:</strong></p>
|
||||
<pre><code class="language-ts">...
|
||||
const doThings = () => {
|
||||
// do things unrelated to foo, bar
|
||||
};
|
||||
|
||||
// Do things involving foo and bar
|
||||
let foo = Math.random();
|
||||
let bar = foo + Math.random() / 100;
|
||||
foo += Math.sin(bar + Math.tan(foo));
|
||||
...
|
||||
</code></pre>
|
||||
<p>Don't allow this to lead to duplicate code, however. If constants are used multiple times, it's okay to declare them at the top of a file or in a separate, imported file.</p>
|
||||
<h2>Prefer <code>const</code> to <code>let</code> (where possible)<a name="prefer-const-to-let-where-possible" href="#prefer-const-to-let-where-possible" class="heading-anchor">🔗</a></h2>
|
||||
<h2>Prefer <code>() => {}</code> to <code>function() { ... }</code><a name="prefer-to-function" href="#prefer-to-function" class="heading-anchor">🔗</a></h2>
|
||||
<p>Doing this avoids having to deal with the <code>this</code> keyword. Not having it makes it easier to refactor class components into React Hooks, because any use of <code>this</code> (used in classes) will be correctly detected as invalid by TypeScript.</p>
|
||||
<p><strong>BAD:</strong></p>
|
||||
<pre><code class="language-ts">// Bad!
|
||||
function foo() {
|
||||
...
|
||||
}
|
||||
</code></pre>
|
||||
<p><strong>Good:</strong></p>
|
||||
<pre><code class="language-ts">const foo = () => {
|
||||
...
|
||||
};
|
||||
</code></pre>
|
||||
<h3>See also<a name="see-also-1" href="#see-also-1" class="heading-anchor">🔗</a></h3>
|
||||
<ul>
|
||||
<li><a href="https://frontarm.com/james-k-nelson/when-to-use-arrow-functions/">Frontend Armory — When should I use arrow functions with React?</a></li>
|
||||
</ul>
|
||||
<h2>Avoid default and optional parameters<a name="avoid-default-and-optional-parameters" href="#avoid-default-and-optional-parameters" class="heading-anchor">🔗</a></h2>
|
||||
<p>As much as possible, avoid default parameters in <strong>function definitions</strong> and optional fields in <strong>interface definitions</strong>. When all parameters are required, it is much easier to refactor the code because the compiler will automatically catch any missing parameters.</p>
|
||||
<h1>React<a name="react" href="#react" class="heading-anchor">🔗</a></h1>
|
||||
<h2>Use function components for new code<a name="use-function-components-for-new-code" href="#use-function-components-for-new-code" class="heading-anchor">🔗</a></h2>
|
||||
<p>New code should use <a href="https://reactjs.org/docs/hooks-intro.html">React Hooks</a> and <code>function</code> components, rather than objects that extend <code>Component</code>.</p>
|
||||
<p><strong>Bad:</strong></p>
|
||||
<pre><code class="language-tsx">// Don't do this in new code!
|
||||
class Example extends React.Component {
|
||||
constructor(props: { text: string }) {
|
||||
super(props);
|
||||
}
|
||||
|
||||
render() {
|
||||
return (
|
||||
<div>${text}</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
</code></pre>
|
||||
<p><strong>Good:</strong></p>
|
||||
<pre><code class="language-tsx">const Example = (props: { text: string }) => {
|
||||
return (
|
||||
<div>${text}</div>
|
||||
);
|
||||
};
|
||||
</code></pre>
|
||||
<h2>Use react <a href="https://reactjs.org/docs/hooks-custom.html">custom hooks</a> to simplify long code<a name="use-react-custom-hooks-https-reactjs-org-docs-hooks-custom-html-to-simplify-long-code" href="#use-react-custom-hooks-https-reactjs-org-docs-hooks-custom-html-to-simplify-long-code" class="heading-anchor">🔗</a></h2>
|
||||
<p>If <code>eslint</code> gives an error about <code>useFoo</code> being called outside of a component, be sure <a href="https://stackoverflow.com/a/55862839">the custom hook is titled appropriately</a>.</p>
|
||||
<h1>See also<a name="see-also-2" href="#see-also-2" class="heading-anchor">🔗</a></h1>
|
||||
<h2><strong>Other</strong> projects' style guides<a name="other-projects-style-guides" href="#other-projects-style-guides" class="heading-anchor">🔗</a></h2>
|
||||
<p>We aren't using these guides, but they may still be helpful!</p>
|
||||
<ul>
|
||||
<li><a href="https://basarat.gitbook.io/typescript/styleguide">TypeScript Deep Dive — Style Guide</a></li>
|
||||
<li><a href="https://google.github.io/styleguide/tsguide.html">Google TypeScript style guide</a>
|
||||
<ul>
|
||||
<li>See also <a href="https://ts.dev/style/#function-expressions"><code>ts.dev</code>'s style guide</a>, which is based on the Google style guide.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="https://standardjs.com/rules.html">Javascript standardstyle</a>
|
||||
<ul>
|
||||
<li>Possibly useful for adding to <code>.eslintrc.js</code>: lists <code>eslint</code> configuration flags for each of their suggestions</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2>Posts/resources related to Joplin's style<a name="posts-resources-related-to-joplin-s-style" href="#posts-resources-related-to-joplin-s-style" class="heading-anchor">🔗</a></h2>
|
||||
<ul>
|
||||
<li>Forum Post: <a href="https://discourse.joplinapp.org/t/troubleshooting-faq-and-collecting-topic-for-contributing-to-joplin-codebase/6501">Troubleshooting FAQ and collecting topic for contributing to Joplin codebase</a></li>
|
||||
<li>Forum Post: <a href="https://discourse.joplinapp.org/t/how-to-style-your-code/6502">How to style your code</a></li>
|
||||
<li>GSoC: <a href="gsoc2022/pull_request_guidelines.md">GSoC 2022 pull request guidelines</a></li>
|
||||
<li>GitHub: <a href="https://github.com/laurent22/joplin/blob/dev/.eslintrc.js"><code>.eslintrc.js</code></a></li>
|
||||
</ul>
|
||||
|
||||
<div class="bottom-links">
|
||||
<a class="bottom-link" href="https://github.com/laurent22/joplin/blob/dev/readme/coding_style.md">
|
||||
<i class="fab fa-github"></i> Improve this doc
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<footer class="darkblue-bg">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12 col-md-12 social-links">
|
||||
<a class="social-link-twitter" href="https://twitter.com/joplinapp" title="Joplin Twitter feed"><i class="fab fa-twitter"></i></a>
|
||||
<a class="social-link-mastodon" href="https://mastodon.social/@joplinapp" title="Joplin Mastodon feed"><i class="fab fa-mastodon"></i></a>
|
||||
<a class="social-link-patreon" href="https://www.patreon.com/joplin" title="Joplin Patreon"><i class="fab fa-patreon"></i></a>
|
||||
<a class="social-link-discord" href="https://discord.gg/VSj7AFHvpq" title="Joplin Discord chat"><i class="fab fa-discord"></i></a>
|
||||
<a class="social-link-reddit" href="https://www.reddit.com/r/joplinapp/" title="Joplin Subreddit"><i class="fab fa-reddit"></i></a>
|
||||
<a class="social-link-github" href="https://github.com/laurent22/joplin/" title="Joplin GitHub repository"><i class="fab fa-github"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row bottom-links-row">
|
||||
<div class="col-12 col-md-6">
|
||||
<p class="text-center-sm">Copyright © 2016-2022 Laurent Cozic</p>
|
||||
</div>
|
||||
<div class="col-12 col-md-6">
|
||||
<p class="text-right text-center-sm right-links">
|
||||
<span class="footer-right">
|
||||
<a href="/privacy/">Privacy Policy</a>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer> </div>
|
||||
|
||||
<script src="/js/script.js?h=46b3b58d72c94591621551affbb8c6e3"></script>
|
||||
|
||||
<script>
|
||||
if (window.location.hostname !== 'localhost') {
|
||||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||||
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||||
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
|
||||
ga('create', 'UA-103586105-1', 'auto');
|
||||
ga('send', 'pageview');
|
||||
}
|
||||
</script> </body>
|
||||
</html>
|
|
@ -349,7 +349,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
|
|||
<li><code>joplin://x-callback-url/openTag?id=<tag id></code> for tag</li>
|
||||
</ul>
|
||||
<h2>Known problems<a name="known-problems" href="#known-problems" class="heading-anchor">🔗</a></h2>
|
||||
<p>On macOS if Joplin isn't running it will start but it won't open the note.</p>
|
||||
<p>On macOS if Joplin isn't running it will start but it won't open the note. If Joplin is running but on a different space as the external link, then Joplin will come to the foreground but without displaying the note.</p>
|
||||
|
||||
<div class="bottom-links">
|
||||
<a class="bottom-link" href="https://github.com/laurent22/joplin/blob/dev/readme/external_links.md">
|
||||
|
|
|
@ -471,13 +471,13 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
|
|||
<td style="text-align:center"><img width="50" src="https://avatars2.githubusercontent.com/u/5782817?s=96&v=4"/></br><a href="https://github.com/piccobit">piccobit</a></td>
|
||||
<td style="text-align:center"><img width="50" src="https://avatars2.githubusercontent.com/u/77214738?s=96&v=4"/></br><a href="https://github.com/Polymathic-Company">Polymathic-Company</a></td>
|
||||
<td style="text-align:center"><img width="50" src="https://avatars2.githubusercontent.com/u/47742?s=96&v=4"/></br><a href="https://github.com/ravenscroftj">ravenscroftj</a></td>
|
||||
<td style="text-align:center"><img width="50" src="https://avatars2.githubusercontent.com/u/765564?s=96&v=4"/></br><a href="https://github.com/taskcruncher">taskcruncher</a></td>
|
||||
<td style="text-align:center"><img width="50" src="https://avatars2.githubusercontent.com/u/327998?s=96&v=4"/></br><a href="https://github.com/sif">sif</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align:center"><img width="50" src="https://avatars2.githubusercontent.com/u/765564?s=96&v=4"/></br><a href="https://github.com/taskcruncher">taskcruncher</a></td>
|
||||
<td style="text-align:center"><img width="50" src="https://avatars2.githubusercontent.com/u/73081837?s=96&v=4"/></br><a href="https://github.com/thismarty">thismarty</a></td>
|
||||
<td style="text-align:center"><img width="50" src="https://avatars2.githubusercontent.com/u/15859362?s=96&v=4"/></br><a href="https://github.com/thomasbroussard">thomasbroussard</a></td>
|
||||
<td style="text-align:center"></td>
|
||||
<td style="text-align:center"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
|
|
@ -742,6 +742,11 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
|
|||
<img width="50" src="https://avatars2.githubusercontent.com/u/77214738?s=96&v=4">
|
||||
</a>
|
||||
</div>
|
||||
<div class="sponsor-github-item">
|
||||
<a href="https://github.com/sif" title="sif">
|
||||
<img width="50" src="https://avatars2.githubusercontent.com/u/327998?s=96&v=4">
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
</div>
|
||||
|
|
|
@ -0,0 +1,223 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<!--
|
||||
|
||||
!!! WARNING !!!
|
||||
|
||||
This file was auto-generated from readme/news/20220808-first-meetup.md and any manual change
|
||||
made to it will be overwritten. To make a change to this file please modify
|
||||
the source Markdown file:
|
||||
|
||||
https://github.com/laurent22/joplin/blob/dev/readme/news/20220808-first-meetup.md
|
||||
|
||||
-->
|
||||
|
||||
<head>
|
||||
<!-- Google Tag Manager -->
|
||||
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
||||
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
||||
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
||||
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
||||
})(window,document,'script','dataLayer','GTM-579DTGX');</script>
|
||||
<!-- End Google Tag Manager --><!-- Monthly/Yearly plan A/B testing -->
|
||||
<!--
|
||||
<script src="https://www.googleoptimize.com/optimize.js?id=OPT-PW3ZPK3"></script>
|
||||
-->
|
||||
|
||||
<!-- Donate button A/B testing -->
|
||||
<!--
|
||||
<script async src="https://www.googleoptimize.com/optimize.js?id=OPT-PW3ZPK3"></script>
|
||||
--> <meta
|
||||
charset="utf-8"
|
||||
http-equiv="X-UA-Compatible"
|
||||
content="IE=edge,chrome=1"
|
||||
/>
|
||||
<link rel="icon" href="/images/favicon.png" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="theme-color" content="#000000" />
|
||||
<meta name="description" content="We are glad to announce the first Joplin Meetup that will take place on 30 August 2022 in London! This is an opportunity to meet other Joplin users as well as some of the main contributors, to disc..." />
|
||||
<meta name="twitter:card" content="summary" />
|
||||
<meta name="twitter:site" content="@joplinapp" />
|
||||
<meta property="og:url" content="https://joplinapp.org/news/20220808-first-meetup/index.html" />
|
||||
<meta property="og:title" content="Joplin first meetup on 30 August!" />
|
||||
<meta property="twitter:title" content="Joplin first meetup on 30 August!" />
|
||||
<meta property="og:description" content="We are glad to announce the first Joplin Meetup that will take place on 30 August 2022 in London! This is an opportunity to meet other Joplin users as well as some of the main contributors, to disc..." />
|
||||
<meta property="twitter:description" content="We are glad to announce the first Joplin Meetup that will take place on 30 August 2022 in London! This is an opportunity to meet other Joplin users as well as some of the main contributors, to disc..." />
|
||||
<link rel="alternate" type="application/rss+xml" title="Joplin RSS feed" href="https://joplinapp.org/rss.xml" /> <link
|
||||
rel="stylesheet"
|
||||
href="/css/bootstrap5.0.2.min.css"
|
||||
as="style"
|
||||
/>
|
||||
<link rel="stylesheet" href="/css/fontawesome-all.min.css?h=ecd507b3125edc4d2a03aa6ae5d07da9">
|
||||
<link
|
||||
href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600;700&display=swap"
|
||||
rel="stylesheet"
|
||||
as="style"
|
||||
media="all"
|
||||
onload="this.media='all'; this.onload = null"
|
||||
/>
|
||||
<link rel="stylesheet" href="/css/site.css?h=48d853dd389c4aa024d008a0719918bf" as="style" />
|
||||
<title>Joplin first meetup on 30 August! | Joplin</title>
|
||||
|
||||
<script
|
||||
src="/js/jquery-3.6.0.min.js"
|
||||
rel="preload"
|
||||
as="script"
|
||||
></script>
|
||||
</head>
|
||||
<body class="website-env-prod">
|
||||
<!-- Google Tag Manager (noscript) -->
|
||||
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-579DTGX"
|
||||
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
|
||||
<!-- End Google Tag Manager (noscript) -->
|
||||
<div class="container-fluid generic-template news-item-page" id="main-container">
|
||||
|
||||
<div class=" navbar-main white-bg" id="nav-section">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-3">
|
||||
<a href="/">
|
||||
<img
|
||||
src="/images/logo-text-blue.svg"
|
||||
alt=""
|
||||
id="top-logo"
|
||||
width="180"
|
||||
/>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-9 text-right d-none d-md-block">
|
||||
<a href="https://twitter.com/joplinapp" title="Joplin Twitter feed" class="fw500"><i class="fab fa-twitter"></i></a> <a href="/news/" class="fw500">News</a>
|
||||
<a href="/help/" class="fw500">Help</a>
|
||||
<a href="https://discourse.joplinapp.org/" class="fw500">Forum</a>
|
||||
<a href="/plans/" class="button-link btn-trans plans-button">Joplin Cloud</a><a class="button-link btn-blue sponsor-button" href="/donate">
|
||||
<i class="fas fa-heart heart-full"></i><i class="far fa-heart heart-line"></i><span class="sponsor-button-label"> Support us</span>
|
||||
</a> </div>
|
||||
<div class="col-9 text-right d-block d-md-none navbar-mobile-content">
|
||||
<a href="https://twitter.com/joplinapp" title="Joplin Twitter feed" class="fw500"><i class="fab fa-twitter"></i></a><a class="button-link btn-blue sponsor-button" href="/donate">
|
||||
<i class="fas fa-heart heart-full"></i><i class="far fa-heart heart-line"></i><span class="sponsor-button-label"> Support us</span>
|
||||
</a>
|
||||
<span class="pointer"
|
||||
><img
|
||||
src="/images/mobile-menu-black-open-icon.png"
|
||||
id="open-menu-mobile"
|
||||
alt=""
|
||||
/></span>
|
||||
|
||||
|
||||
<div id="menu-mobile">
|
||||
<div>
|
||||
<div class="text-right">
|
||||
<img
|
||||
src="/images/close-icon.png"
|
||||
alt=""
|
||||
class="pointer"
|
||||
id="close-menu-mobile"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="text-center menu-mobile-top">
|
||||
<a href="/news/" class="fw500 mobile-menu-link">News</a>
|
||||
<a href="/help/" class="fw500 mobile-menu-link">Help</a>
|
||||
<a href="https://discourse.joplinapp.org/" class="fw500 mobile-menu-link">Forum</a>
|
||||
</div>
|
||||
|
||||
<div class="menu-mobile-buttons">
|
||||
<a href="/plans/" class="button-link btn-trans plans-button">Joplin Cloud</a><a class="button-link btn-blue sponsor-button" href="/donate">
|
||||
<i class="fas fa-heart heart-full"></i><i class="far fa-heart heart-line"></i><span class="sponsor-button-label"> Support us</span>
|
||||
</a> </div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12 col-md-12 social-links">
|
||||
<a class="social-link-twitter" href="https://twitter.com/joplinapp" title="Joplin Twitter feed"><i class="fab fa-twitter"></i></a>
|
||||
<a class="social-link-mastodon" href="https://mastodon.social/@joplinapp" title="Joplin Mastodon feed"><i class="fab fa-mastodon"></i></a>
|
||||
<a class="social-link-patreon" href="https://www.patreon.com/joplin" title="Joplin Patreon"><i class="fab fa-patreon"></i></a>
|
||||
<a class="social-link-discord" href="https://discord.gg/VSj7AFHvpq" title="Joplin Discord chat"><i class="fab fa-discord"></i></a>
|
||||
<a class="social-link-reddit" href="https://www.reddit.com/r/joplinapp/" title="Joplin Subreddit"><i class="fab fa-reddit"></i></a>
|
||||
<a class="social-link-github" href="https://github.com/laurent22/joplin/" title="Joplin GitHub repository"><i class="fab fa-github"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<p class="light-blue mobile-menu-link-bottom text-center">
|
||||
Copyright © 2016-2022 Laurent Cozic
|
||||
<br/>
|
||||
<a href="/privacy/" class="fw500">Privacy Policy</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="help-page-container page-20220808-first-meetup">
|
||||
<div class="container">
|
||||
<div class="row content-wrapper">
|
||||
|
||||
|
||||
<div class="main-content">
|
||||
<div class="alert alert-danger alert-env-dev" role="alert">
|
||||
Running in prod mode!
|
||||
</div>
|
||||
<div class="donate-links">
|
||||
<p><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=E8JMYD2LQ8MMA&lc=GB&item_name=Joplin+Development&currency_code=EUR&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted"><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/badges/Donate-PayPal-green.svg" alt="Donate using PayPal"></a> <a href="https://github.com/sponsors/laurent22/"><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/badges/GitHub-Badge.svg" alt="Sponsor on GitHub"></a> <a href="https://www.patreon.com/joplin"><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/badges/Patreon-Badge.svg" alt="Become a patron"></a> <a href="https://joplinapp.org/donate/#donations"><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/badges/Donate-IBAN.svg" alt="Donate using IBAN"></a></p>
|
||||
</div>
|
||||
<h1><a href="/news/20220808-first-meetup/">Joplin first meetup on 30 August!</a><a name="joplin-first-meetup-on-30-august-news-20220808-first-meetup" href="#joplin-first-meetup-on-30-august-news-20220808-first-meetup" class="heading-anchor">🔗</a></h1>
|
||||
<p><em>Published on <strong>8 Aug 2022</strong></em></p>
|
||||
<p>We are glad to announce <a href="https://www.meetup.com/joplin/events/287611873/">the first Joplin Meetup</a> that will take place on 30 August 2022 in London!</p>
|
||||
<p>This is an opportunity to meet other Joplin users as well as some of the main contributors, to discuss the apps, or to ask questions and exchange tips and tricks on how to use the app, develop plugins or contribute to the application. Everybody, technical or not, is welcome!</p>
|
||||
<p>We will meet at the Old Thameside Inn next to London Bridge. If the weather allows we will be on the terrace outside, if not inside.</p>
|
||||
<p>More information on the official Meetup page:</p>
|
||||
<p><a href="https://www.meetup.com/joplin/events/287611873/">https://www.meetup.com/joplin/events/287611873/</a></p>
|
||||
<hr>
|
||||
<p><a href="https://discourse.joplinapp.org/c/news/9"><i class="fab fa-discourse"></i> Discuss on the forum</a></p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<footer class="darkblue-bg">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12 col-md-12 social-links">
|
||||
<a class="social-link-twitter" href="https://twitter.com/joplinapp" title="Joplin Twitter feed"><i class="fab fa-twitter"></i></a>
|
||||
<a class="social-link-mastodon" href="https://mastodon.social/@joplinapp" title="Joplin Mastodon feed"><i class="fab fa-mastodon"></i></a>
|
||||
<a class="social-link-patreon" href="https://www.patreon.com/joplin" title="Joplin Patreon"><i class="fab fa-patreon"></i></a>
|
||||
<a class="social-link-discord" href="https://discord.gg/VSj7AFHvpq" title="Joplin Discord chat"><i class="fab fa-discord"></i></a>
|
||||
<a class="social-link-reddit" href="https://www.reddit.com/r/joplinapp/" title="Joplin Subreddit"><i class="fab fa-reddit"></i></a>
|
||||
<a class="social-link-github" href="https://github.com/laurent22/joplin/" title="Joplin GitHub repository"><i class="fab fa-github"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row bottom-links-row">
|
||||
<div class="col-12 col-md-6">
|
||||
<p class="text-center-sm">Copyright © 2016-2022 Laurent Cozic</p>
|
||||
</div>
|
||||
<div class="col-12 col-md-6">
|
||||
<p class="text-right text-center-sm right-links">
|
||||
<span class="footer-right">
|
||||
<a href="/privacy/">Privacy Policy</a>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer> </div>
|
||||
|
||||
<script src="/js/script.js?h=46b3b58d72c94591621551affbb8c6e3"></script>
|
||||
|
||||
<script>
|
||||
if (window.location.hostname !== 'localhost') {
|
||||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||||
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||||
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
|
||||
ga('create', 'UA-103586105-1', 'auto');
|
||||
ga('send', 'pageview');
|
||||
}
|
||||
</script> </body>
|
||||
</html>
|
|
@ -164,6 +164,16 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
|
|||
<div class="donate-links">
|
||||
<p><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=E8JMYD2LQ8MMA&lc=GB&item_name=Joplin+Development&currency_code=EUR&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted"><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/badges/Donate-PayPal-green.svg" alt="Donate using PayPal"></a> <a href="https://github.com/sponsors/laurent22/"><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/badges/GitHub-Badge.svg" alt="Sponsor on GitHub"></a> <a href="https://www.patreon.com/joplin"><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/badges/Patreon-Badge.svg" alt="Become a patron"></a> <a href="https://joplinapp.org/donate/#donations"><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/badges/Donate-IBAN.svg" alt="Donate using IBAN"></a></p>
|
||||
</div>
|
||||
<h1><a href="/news/20220808-first-meetup/">Joplin first meetup on 30 August!</a><a name="joplin-first-meetup-on-30-august-news-20220808-first-meetup" href="#joplin-first-meetup-on-30-august-news-20220808-first-meetup" class="heading-anchor">🔗</a></h1>
|
||||
<p><em>Published on <strong>8 Aug 2022</strong></em></p>
|
||||
<p>We are glad to announce <a href="https://www.meetup.com/joplin/events/287611873/">the first Joplin Meetup</a> that will take place on 30 August 2022 in London!</p>
|
||||
<p>This is an opportunity to meet other Joplin users as well as some of the main contributors, to discuss the apps, or to ask questions and exchange tips and tricks on how to use the app, develop plugins or contribute to the application. Everybody, technical or not, is welcome!</p>
|
||||
<p>We will meet at the Old Thameside Inn next to London Bridge. If the weather allows we will be on the terrace outside, if not inside.</p>
|
||||
<p>More information on the official Meetup page:</p>
|
||||
<p><a href="https://www.meetup.com/joplin/events/287611873/">https://www.meetup.com/joplin/events/287611873/</a></p>
|
||||
<hr>
|
||||
<p><a href="https://discourse.joplinapp.org/c/news/9"><i class="fab fa-discourse"></i> Discuss on the forum</a></p>
|
||||
<hr>
|
||||
<h1><a href="/news/20220606-release-2-8/">Joplin 2.8 is available!</a><a name="joplin-2-8-is-available-news-20220606-release-2-8" href="#joplin-2-8-is-available-news-20220606-release-2-8" class="heading-anchor">🔗</a></h1>
|
||||
<p><em>Published on <strong>6 Jun 2022</strong></em></p>
|
||||
<p>As always a lot of changes and new features in this new version available on both desktop and mobile.</p>
|
||||
|
@ -515,13 +525,6 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
|
|||
<p>From what I can see on Google Keep or Evernote for example it should be something like "Use our app to get X or Y benefit", it should be a sentence that directly speaks to the user essentially.</p>
|
||||
<p>So far I have "Your notes, anywhere you are" but I'm not certain that's particularly inspiring. Any other idea about what tagline could be used?</p>
|
||||
<hr>
|
||||
<p><a href="https://discourse.joplinapp.org/c/news/9"><i class="fab fa-discourse"></i> Discuss on the forum</a></p>
|
||||
<hr>
|
||||
<h1><a href="/news/20210624-171844/">Poll: What's the size of your note collection?</a><a name="poll-what-s-the-size-of-your-note-collection-news-20210624-171844" href="#poll-what-s-the-size-of-your-note-collection-news-20210624-171844" class="heading-anchor">🔗</a></h1>
|
||||
<p><em>Published on <strong>24 Jun 2021</strong></em></p>
|
||||
<p>Poll is on the forum:</p>
|
||||
<p><a href="https://discourse.joplinapp.org/t/poll-whats-the-size-of-your-note-collection/18191">https://discourse.joplinapp.org/t/poll-whats-the-size-of-your-note-collection/18191</a></p>
|
||||
<hr>
|
||||
<p><a href="https://discourse.joplinapp.org/c/news/9"><i class="fab fa-discourse"></i> Discuss on the forum</a></p>
|
||||
|
||||
</div>
|
||||
|
|
11
docs/rss.xml
11
docs/rss.xml
|
@ -1,4 +1,9 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Joplin]]></title><description><![CDATA[Joplin, the open source note-taking application]]></description><link>https://joplinapp.org</link><generator>RSS for Node</generator><lastBuildDate>Mon, 06 Jun 2022 00:00:00 GMT</lastBuildDate><atom:link href="https://joplinapp.org/rss.xml" rel="self" type="application/rss+xml"/><pubDate>Mon, 06 Jun 2022 00:00:00 GMT</pubDate><item><title><![CDATA[Joplin 2.8 is available!]]></title><description><![CDATA[<p>As always a lot of changes and new features in this new version available on both desktop and mobile.</p>
|
||||
<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Joplin]]></title><description><![CDATA[Joplin, the open source note-taking application]]></description><link>https://joplinapp.org</link><generator>RSS for Node</generator><lastBuildDate>Mon, 08 Aug 2022 00:00:00 GMT</lastBuildDate><atom:link href="https://joplinapp.org/rss.xml" rel="self" type="application/rss+xml"/><pubDate>Mon, 08 Aug 2022 00:00:00 GMT</pubDate><item><title><![CDATA[Joplin first meetup on 30 August!]]></title><description><![CDATA[<p>We are glad to announce <a href="https://www.meetup.com/joplin/events/287611873/">the first Joplin Meetup</a> that will take place on 30 August 2022 in London!</p>
|
||||
<p>This is an opportunity to meet other Joplin users as well as some of the main contributors, to discuss the apps, or to ask questions and exchange tips and tricks on how to use the app, develop plugins or contribute to the application. Everybody, technical or not, is welcome!</p>
|
||||
<p>We will meet at the Old Thameside Inn next to London Bridge. If the weather allows we will be on the terrace outside, if not inside.</p>
|
||||
<p>More information on the official Meetup page:</p>
|
||||
<p><a href="https://www.meetup.com/joplin/events/287611873/">https://www.meetup.com/joplin/events/287611873/</a></p>
|
||||
]]></description><link>https://joplinapp.org/news/20220808-first-meetup/</link><guid isPermaLink="false">20220808-first-meetup</guid><pubDate>Mon, 08 Aug 2022 00:00:00 GMT</pubDate><twitter-text>Joplin will have its first Meetup on 30 August! Come and join us at the Old Thameside Inn next to London Bridge! https://www.meetup.com/joplin/events/287611873/</twitter-text></item><item><title><![CDATA[Joplin 2.8 is available!]]></title><description><![CDATA[<p>As always a lot of changes and new features in this new version available on both desktop and mobile.</p>
|
||||
<h1>Multiple profile support<a name="multiple-profile-support" href="#multiple-profile-support" class="heading-anchor">🔗</a></h1>
|
||||
<p>Perhaps the most visible change in this version is the support for multiple profiles. You can now create as many application profile as you wish, each with their own settings, and easily switch from one to another. The main use case is to support for example a "work" profile and a "personal" profile, to allow you to keep things independent, and each profile can sync with a different sync target.</p>
|
||||
<p>To create a new profile, open <strong>File > Switch profile</strong> and select <strong>Create new profile</strong>, enter the profile name and press OK. The app will automatically switch to this new profile, which you can now configure.</p>
|
||||
|
@ -256,6 +261,4 @@
|
|||
]]></description><link>https://joplinapp.org/news/20210706-140228/</link><guid isPermaLink="false">20210706-140228</guid><pubDate>Tue, 06 Jul 2021 14:02:28 GMT</pubDate><twitter-text></twitter-text></item><item><title><![CDATA[Any ideas for a Joplin tagline?]]></title><description><![CDATA[<p>I'm going to update the website front page to better showcase the application. I have most of the sections right, but the part I'm still not sure about is the top tagline, so I'm wondering if anyone had any suggestion about it?</p>
|
||||
<p>From what I can see on Google Keep or Evernote for example it should be something like "Use our app to get X or Y benefit", it should be a sentence that directly speaks to the user essentially.</p>
|
||||
<p>So far I have "Your notes, anywhere you are" but I'm not certain that's particularly inspiring. Any other idea about what tagline could be used?</p>
|
||||
]]></description><link>https://joplinapp.org/news/20210705-094247/</link><guid isPermaLink="false">20210705-094247</guid><pubDate>Mon, 05 Jul 2021 09:42:47 GMT</pubDate><twitter-text></twitter-text></item><item><title><![CDATA[Poll: What's the size of your note collection?]]></title><description><![CDATA[<p>Poll is on the forum:</p>
|
||||
<p><a href="https://discourse.joplinapp.org/t/poll-whats-the-size-of-your-note-collection/18191">https://discourse.joplinapp.org/t/poll-whats-the-size-of-your-note-collection/18191</a></p>
|
||||
]]></description><link>https://joplinapp.org/news/20210624-171844/</link><guid isPermaLink="false">20210624-171844</guid><pubDate>Thu, 24 Jun 2021 17:18:44 GMT</pubDate><twitter-text></twitter-text></item></channel></rss>
|
||||
]]></description><link>https://joplinapp.org/news/20210705-094247/</link><guid isPermaLink="false">20210705-094247</guid><pubDate>Mon, 05 Jul 2021 09:42:47 GMT</pubDate><twitter-text></twitter-text></item></channel></rss>
|
Loading…
Reference in New Issue