From 820ae8fab218e215f2f9e85cd8976761688f2909 Mon Sep 17 00:00:00 2001
From: Anton Reshetov
Date: Tue, 12 Apr 2022 12:25:45 +0300
Subject: [PATCH 01/13] chore: update CHANGELOG
---
CHANGELOG.md | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 46ab3cea..36027481 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,19 @@
+# [2.0.0-beta.4](https://github.com/massCodeIO/massCode/compare/v2.0.0-beta.3...v2.0.0-beta.4) (2022-04-12)
+
+
+### Bug Fixes
+
+* **editor:** undo/redo stack ([84096c4](https://github.com/massCodeIO/massCode/commit/84096c47bcf88b49229997d592f473f23812672e))
+* **snippets:** sort in 'All snippets' ([ab799d5](https://github.com/massCodeIO/massCode/commit/ab799d5df478bed659d56cb6529c1dd589355c0f))
+
+
+### Features
+
+* add editor preferences ([#18](https://github.com/massCodeIO/massCode/issues/18)) ([d1fe23f](https://github.com/massCodeIO/massCode/commit/d1fe23fd510445426424bef85df2e3cf01c086e4))
+* **snippets:** add markdown preview ([#15](https://github.com/massCodeIO/massCode/issues/15)) ([c208871](https://github.com/massCodeIO/massCode/commit/c2088712ffbc38c2ce2593ec50dbaeaa6291bd7a))
+
+
+
# [2.0.0-beta.3](https://github.com/massCodeIO/massCode/compare/v2.0.0-beta.2...v2.0.0-beta.3) (2022-04-11)
From a1e41b3ab567854eda7b9c636cb94c6e34614242 Mon Sep 17 00:00:00 2001
From: Anton Reshetov
Date: Tue, 12 Apr 2022 15:18:06 +0300
Subject: [PATCH 02/13] feat: resizable layout (#19)
---
package.json | 1 +
src/main/store/module/app.ts | 4 ++-
src/renderer/App.vue | 3 ++
src/renderer/components/editor/TheEditor.vue | 4 ---
.../components/sidebar/TheSidebar.vue | 31 +++++++++++++++---
.../components/snippets/SnippetList.vue | 32 ++++++++++++++++---
.../components/snippets/SnippetListHeader.vue | 1 +
src/renderer/store/app.ts | 2 ++
src/renderer/views/Main.vue | 6 +++-
src/shared/types/main/store.d.ts | 2 ++
src/shared/types/renderer/store/app.d.ts | 2 ++
yarn.lock | 12 +++++++
12 files changed, 86 insertions(+), 14 deletions(-)
diff --git a/package.json b/package.json
index eb74158f..a721560c 100644
--- a/package.json
+++ b/package.json
@@ -40,6 +40,7 @@
"electron-store": "^8.0.1",
"fs-extra": "^10.0.1",
"highlight.js": "^11.5.1",
+ "interactjs": "^1.10.11",
"lowdb": "^3.0.0",
"markdown-it": "^12.3.2",
"markdown-it-link-attributes": "^4.0.0",
diff --git a/src/main/store/module/app.ts b/src/main/store/module/app.ts
index 23ad09c9..0253dfa8 100644
--- a/src/main/store/module/app.ts
+++ b/src/main/store/module/app.ts
@@ -6,6 +6,8 @@ export default new Store({
cwd: 'v2',
defaults: {
- bounds: {}
+ bounds: {},
+ sidebarWidth: 180,
+ snippetListWidth: 250
}
})
diff --git a/src/renderer/App.vue b/src/renderer/App.vue
index 914aff53..0cb8d30b 100644
--- a/src/renderer/App.vue
+++ b/src/renderer/App.vue
@@ -36,6 +36,9 @@ const init = () => {
store.preferences.get('editor')
)
if (isValid) appStore.editor = store.preferences.get('editor')
+
+ appStore.sizes.sidebar = store.app.get('sidebarWidth')
+ appStore.sizes.snippetList = store.app.get('snippetListWidth')
}
const setTheme = (theme: string) => {
diff --git a/src/renderer/components/editor/TheEditor.vue b/src/renderer/components/editor/TheEditor.vue
index 55ec830d..b18a327d 100644
--- a/src/renderer/components/editor/TheEditor.vue
+++ b/src/renderer/components/editor/TheEditor.vue
@@ -213,10 +213,6 @@ watch(
}
)
-appStore.$subscribe(mutation => {
- console.log(mutation)
-})
-
window.addEventListener('resize', () => {
forceRefresh.value = Math.random()
})
diff --git a/src/renderer/components/sidebar/TheSidebar.vue b/src/renderer/components/sidebar/TheSidebar.vue
index f610f215..a51bd917 100644
--- a/src/renderer/components/sidebar/TheSidebar.vue
+++ b/src/renderer/components/sidebar/TheSidebar.vue
@@ -1,5 +1,8 @@
-
-
@@ -39,9 +44,12 @@ const props = defineProps()
const items = ref- ([])
const value = computed(() => props.modelValue)
+const bodyRef = ref()
const onClickItem = (item: Item) => {
emit('update:modelValue', item.value)
+ const el = bodyRef.value?.querySelector('.ps')
+ if (el) el.scrollTop = 0
}
const update = (value: string) => {
@@ -55,15 +63,22 @@ provide('items', items.value)
diff --git a/src/renderer/store/app.ts b/src/renderer/store/app.ts
index 2e2e8730..97c513ba 100644
--- a/src/renderer/store/app.ts
+++ b/src/renderer/store/app.ts
@@ -8,7 +8,10 @@ const EDITOR_DEFAULTS: EditorSettings = {
fontSize: 12,
showInvisibles: false,
tabSize: 2,
- wrap: 'free'
+ wrap: 'free',
+ trailingComma: 'none',
+ semi: false,
+ singleQuote: true
}
export const useAppStore = defineStore('app', {
diff --git a/src/renderer/views/Preferences.vue b/src/renderer/views/Preferences.vue
index 56b4daaa..6293019c 100644
--- a/src/renderer/views/Preferences.vue
+++ b/src/renderer/views/Preferences.vue
@@ -45,16 +45,15 @@ track('preferences')
margin: 0;
}
margin-top: var(--title-bar-height);
- padding: var(--spacing-sm);
}
.title {
+ padding: var(--spacing-sm);
display: flex;
align-items: center;
justify-content: space-between;
}
.body {
- padding-top: var(--spacing-sm);
+ padding: 0 0 var(--spacing-sm) var(--spacing-sm);
display: grid;
- grid-template-columns: 200px 1fr;
}
diff --git a/src/shared/types/main/index.d.ts b/src/shared/types/main/index.d.ts
index 48a120f7..9020dfb9 100644
--- a/src/shared/types/main/index.d.ts
+++ b/src/shared/types/main/index.d.ts
@@ -33,6 +33,7 @@ type MainMenuAction =
| 'preferences'
| 'new-snippet'
| 'copy-snippet'
+ | 'format-snippet'
| 'new-fragment'
| 'new-folder'
| 'search'
diff --git a/src/shared/types/main/store.d.ts b/src/shared/types/main/store.d.ts
index 1054d3a3..20b321ed 100644
--- a/src/shared/types/main/store.d.ts
+++ b/src/shared/types/main/store.d.ts
@@ -15,6 +15,9 @@ interface Editor {
showInvisibles: boolean
tabSize: number
wrap: string
+ trailingComma: 'all' | 'none' | 'es5'
+ semi: boolean
+ singleQuote: boolean
}
export interface PreferencesStore {
storagePath: string
diff --git a/src/shared/types/renderer/composable/index.d.ts b/src/shared/types/renderer/composable/index.d.ts
index ef47e98c..f1383e4d 100644
--- a/src/shared/types/renderer/composable/index.d.ts
+++ b/src/shared/types/renderer/composable/index.d.ts
@@ -2,4 +2,5 @@ export type EmitterEvents = {
'focus:snippet-name': boolean
'folder:click': any
'scroll-to:folder': string
+ 'format-snippet': boolean
}
diff --git a/src/shared/types/renderer/store/app.d.ts b/src/shared/types/renderer/store/app.d.ts
index 566d497e..154ce014 100644
--- a/src/shared/types/renderer/store/app.d.ts
+++ b/src/shared/types/renderer/store/app.d.ts
@@ -18,6 +18,9 @@ export interface EditorSettings {
fontFamily: string
wrap: Ace.EditSessionOptions['wrap']
tabSize: number
+ trailingComma: 'all' | 'none' | 'es5'
+ semi: boolean
+ singleQuote: boolean
}
export interface State {
platform: NodeJS.Platform
diff --git a/yarn.lock b/yarn.lock
index ab5ba0a9..30564de1 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1851,6 +1851,11 @@
"@types/node" "*"
xmlbuilder ">=11.0.1"
+"@types/prettier@^2.6.0":
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.6.0.tgz#efcbd41937f9ae7434c714ab698604822d890759"
+ integrity sha512-G/AdOadiZhnJp0jXCaBQU449W2h716OW/EoXeYkCytxKL06X1WCXB4DZpp8TpZ8eyIJVS1cw4lrlkkSYU21cDw==
+
"@types/q@^1.5.1":
version "1.5.5"
resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df"
From b5d3ee01cf7ad48dffb0255d10b652f98659867b Mon Sep 17 00:00:00 2001
From: Anton Reshetov
Date: Wed, 13 Apr 2022 10:37:56 +0300
Subject: [PATCH 08/13] fix(snippets): open external link in markdown
---
src/renderer/components/markdown/TheMarkdown.vue | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/renderer/components/markdown/TheMarkdown.vue b/src/renderer/components/markdown/TheMarkdown.vue
index 84d48706..7c526837 100644
--- a/src/renderer/components/markdown/TheMarkdown.vue
+++ b/src/renderer/components/markdown/TheMarkdown.vue
@@ -84,8 +84,8 @@ const renderer = computed(() => getRenderer())
const openExternal = (e: Event) => {
const el = e.target as HTMLAnchorElement
+ e.preventDefault()
if (el.classList.contains('external')) {
- e.preventDefault()
ipc.invoke('main:open-url', el.href)
}
}
From 35e77372228bc946f26c3abd036564b2c1778bae Mon Sep 17 00:00:00 2001
From: Anton Reshetov
Date: Wed, 13 Apr 2022 16:22:43 +0300
Subject: [PATCH 09/13] chore: update README
---
README.md | 39 +++++++++++++++++++++++++++++++++++----
1 file changed, 35 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
index c92a7b39..0502e7bb 100644
--- a/README.md
+++ b/README.md
@@ -12,7 +12,7 @@
-massCode next
+massCode
Built with Electron, Vue 3 & Ace Editor.
@@ -29,10 +29,35 @@
The best support right now is your star for the project. You can also help spread the word about the app in the public.
-## Feature for now
+
+
+## Features
+### Organization
+massCode allows you to organize snippets using multi-level folders as well as tags. Each snippet has fragments - tabs, which gives even greater level of organization.
+
+### Editor
+A snippet manager must not only provide organization of snippets but also have a good code editor. That's why under the hood of massCode there's [Ace](https://microsoft.github.io/monaco-editor). Ace is a high performance code editor which supports syntax highlighting for over 170 languages. We also added a [Prettier](https://prettier.io/) to code formatter.
+
+### Markdown
+massCode allows you to write in Markdown and also provide syntax highlighting inside a code block. And of course there is a preview.
+
+### Search
+It is impossible to imagine a productive snippets manager without quick access to snippets. Therefore massCode has a fast full-text search with highlighting of the search query.
+
+### Autosave
+massCode automatically saves any changes you make during work, so you don't have to worry about losing changes.
+
+### Sync
+You can use any service that provides cloud synchronization, such as iCloud Drive, Google Drive, Dropbox or other similar.
+
+### Database
+massCode uses a simple JSON to store your data. The database files are on your local computer.
+
+### API Server
+Coming soon.
## Overview
@@ -45,4 +70,10 @@ massCode allows you to organize snippets using multi-level folders as well as ta
- [Discussions](https://github.com/massCodeIO/massCode/discussions).
## Other
-You can also [download](https://github.com/antonreshetov/massCode) massCode v1.
\ No newline at end of file
+You can also [download](https://github.com/antonreshetov/massCode) massCode v1.
+
+## License
+
+[AGPL-3.0](https://github.com/massCodeIO/massCode/blob/master/LICENSE)
+
+Copyright (c) 2019-present, Anton Reshetov.
\ No newline at end of file
From d0fac146ebe2228a460253d9bf875a2191005fdb Mon Sep 17 00:00:00 2001
From: Anton Reshetov
Date: Wed, 13 Apr 2022 16:40:32 +0300
Subject: [PATCH 10/13] chore: track snippet format
---
src/renderer/components/editor/TheEditor.vue | 1 +
src/shared/types/main/analytics.d.ts | 1 +
2 files changed, 2 insertions(+)
diff --git a/src/renderer/components/editor/TheEditor.vue b/src/renderer/components/editor/TheEditor.vue
index 58ebed0e..9b206657 100644
--- a/src/renderer/components/editor/TheEditor.vue
+++ b/src/renderer/components/editor/TheEditor.vue
@@ -200,6 +200,7 @@ const format = () => {
// Обновляем напрямую без debounce
snippetStore.patchCurrentSnippetContentByKey('value', formatted)
+ track('snippets/format')
} catch (err) {
console.error(err)
}
diff --git a/src/shared/types/main/analytics.d.ts b/src/shared/types/main/analytics.d.ts
index ae18214b..ebb59653 100644
--- a/src/shared/types/main/analytics.d.ts
+++ b/src/shared/types/main/analytics.d.ts
@@ -13,6 +13,7 @@ type SnippetEvents =
| 'move-to-trash'
| 'set-language'
| 'search'
+ | 'format'
type FolderEvents = 'add-new' | 'delete' | 'set-language'
type TagEvents = 'add-new' | 'delete'
type AppEvents =
From 097d2cbf688fdfc7404d1e7d9e479bb70dd42ed0 Mon Sep 17 00:00:00 2001
From: Anton Reshetov
Date: Wed, 13 Apr 2022 16:54:48 +0300
Subject: [PATCH 11/13] fix(snippets): cut off snippets name for Windows #20
(#24)
---
src/renderer/components/editor/TheEditor.vue | 1 +
src/renderer/components/snippets/SnippetHeader.vue | 1 +
src/renderer/components/snippets/SnippetListItem.vue | 1 +
src/shared/types/main/analytics.d.ts | 1 +
4 files changed, 4 insertions(+)
diff --git a/src/renderer/components/editor/TheEditor.vue b/src/renderer/components/editor/TheEditor.vue
index 58ebed0e..9b206657 100644
--- a/src/renderer/components/editor/TheEditor.vue
+++ b/src/renderer/components/editor/TheEditor.vue
@@ -200,6 +200,7 @@ const format = () => {
// Обновляем напрямую без debounce
snippetStore.patchCurrentSnippetContentByKey('value', formatted)
+ track('snippets/format')
} catch (err) {
console.error(err)
}
diff --git a/src/renderer/components/snippets/SnippetHeader.vue b/src/renderer/components/snippets/SnippetHeader.vue
index 1a1bf095..3d203737 100644
--- a/src/renderer/components/snippets/SnippetHeader.vue
+++ b/src/renderer/components/snippets/SnippetHeader.vue
@@ -82,6 +82,7 @@ emitter.on('focus:snippet-name', () => {
border: 0;
width: 100%;
outline: none;
+ line-height: 32px;
text-overflow: ellipsis;
}
}
diff --git a/src/renderer/components/snippets/SnippetListItem.vue b/src/renderer/components/snippets/SnippetListItem.vue
index 3414b553..c64d2d61 100644
--- a/src/renderer/components/snippets/SnippetListItem.vue
+++ b/src/renderer/components/snippets/SnippetListItem.vue
@@ -308,6 +308,7 @@ const onDragEnd = () => {
overflow: hidden;
position: relative;
z-index: 1;
+ line-height: 24px;
span {
display: -webkit-box;
-webkit-line-clamp: 1;
diff --git a/src/shared/types/main/analytics.d.ts b/src/shared/types/main/analytics.d.ts
index ae18214b..ebb59653 100644
--- a/src/shared/types/main/analytics.d.ts
+++ b/src/shared/types/main/analytics.d.ts
@@ -13,6 +13,7 @@ type SnippetEvents =
| 'move-to-trash'
| 'set-language'
| 'search'
+ | 'format'
type FolderEvents = 'add-new' | 'delete' | 'set-language'
type TagEvents = 'add-new' | 'delete'
type AppEvents =
From c2ce2ca063ae0bb7163d32202fb364ed0b368a66 Mon Sep 17 00:00:00 2001
From: Anton Reshetov
Date: Wed, 13 Apr 2022 17:12:21 +0300
Subject: [PATCH 12/13] chore: update bug_report
---
.github/ISSUE_TEMPLATE/bug_report.md | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index c4f0dd70..b3ad2aec 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -1,12 +1,14 @@
---
name: Bug report
about: Create a report to help us improve
-title: "[BUG]"
+title: "[BUG] Issue title"
labels: ''
assignees: ''
---
+> Issues that do not follow to this template will be closed without review.
+
**Describe the bug**
A clear and concise description of what the bug is.
From da1744a34fb0e6292fb4a16c0475bf7780f99201 Mon Sep 17 00:00:00 2001
From: Anton Reshetov
Date: Wed, 13 Apr 2022 17:15:02 +0300
Subject: [PATCH 13/13] build: release v2.0.0-beta.5
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index 99b81534..b4e7579a 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "masscode",
"productName": "massCode",
- "version": "2.0.0-beta.4",
+ "version": "2.0.0-beta.5",
"description": "A free and open source code snippets manager for developers",
"license": "AGPL-3.0",
"main": "build/src/main/index.js",