Skip to content

Commit

Permalink
chore: merge pull request #30 from antonreshetov:dev
Browse files Browse the repository at this point in the history
  • Loading branch information
antonreshetov authored Jan 23, 2020
2 parents c497ea7 + 1d6afe8 commit 9633700
Show file tree
Hide file tree
Showing 13 changed files with 315 additions and 80 deletions.
96 changes: 83 additions & 13 deletions src/index.ejs
Original file line number Diff line number Diff line change
@@ -1,25 +1,95 @@
<!DOCTYPE html>
<html lang="en">
<head>

<head>
<meta charset="utf-8">
<% if (htmlWebpackPlugin.options.nodeModules) { %>
<!-- Add `node_modules/` to global paths so `require` works properly in development -->
<script>
require('module').globalPaths.push('<%= htmlWebpackPlugin.options.nodeModules.replace(/\\/g, '\\\\') %>')
</script>
<!-- Add `node_modules/` to global paths so `require` works properly in development -->
<script>
require('module').globalPaths.push('<%= htmlWebpackPlugin.options.nodeModules.replace(/\\/g, '\\\\') %>')
</script>
<% } %>
</head>
<body>
<style>
body {
margin: 0;
}
.app-init-preloader {
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
font-family: Arial, Helvetica, sans-serif;
}
.app-init-preloader p {
font-size: 16px;
margin-right: 6px;
}
.spinner {
width: 30px;
height: 30px;
position: relative;
}
.double-bounce1,
.double-bounce2 {
width: 100%;
height: 100%;
border-radius: 50%;
background-color: hsl(213, 81%, 67%);
opacity: 0.6;
position: absolute;
top: 0;
left: 0;
-webkit-animation: sk-bounce 2.0s infinite ease-in-out;
animation: sk-bounce 2.0s infinite ease-in-out;
}
.double-bounce2 {
-webkit-animation-delay: -1.0s;
animation-delay: -1.0s;
}
@-webkit-keyframes sk-bounce {
0%,
100% {
-webkit-transform: scale(0.0)
}
50% {
-webkit-transform: scale(1.0)
}
}
@keyframes sk-bounce {
0%,
100% {
transform: scale(0.0);
-webkit-transform: scale(0.0);
}
50% {
transform: scale(1.0);
-webkit-transform: scale(1.0);
}
}
</style>
</head>

<div id="app"></div>
<body>

<!-- Set `__static` path to static files in production -->
<% if (!htmlWebpackPlugin.options.isBrowser && !htmlWebpackPlugin.options.isDevelopment) { %>
<div id="app">
<div class="app-init-preloader">
<p><strong>massCode</strong> is loading</p>
<div class="spinner">
<div class="double-bounce1"></div>
<div class="double-bounce2"></div>
</div>
</div>
</div>

<!-- Set `__static` path to static files in production -->
<% if (!htmlWebpackPlugin.options.isBrowser && !htmlWebpackPlugin.options.isDevelopment) { %>
<script>
window.__static = require('path').join(__dirname, '/static').replace(/\\/g, '\\\\')
</script>
<% } %>
<% } %>

<!-- webpack builds are automatically injected -->
</body>

<!-- webpack builds are automatically injected -->
</body>
</html>
4 changes: 2 additions & 2 deletions src/main/store/module/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ const app = new Store({
default: null
},
sidebarWidth: {
default: null
default: 180
},
snippetListWidth: {
default: null
default: 220
},
selectedFolderId: {
default: null
Expand Down
12 changes: 12 additions & 0 deletions src/main/store/module/preferences.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,18 @@ const preferences = new Store({
assistantShortcut: {
default: 'Option+S'
},
renderWhitespace: {
default: 'none'
},
wordWrap: {
default: 'off'
},
tabSize: {
default: 2
},
insertSpaces: {
default: true
},
allowAnalytics: {
default: true
}
Expand Down
53 changes: 5 additions & 48 deletions src/renderer/App.vue
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,13 @@
:data-theme="app.theme"
>
<div class="app-title-bar" />
<RouterView />
<KeepAlive>
<RouterView />
</KeepAlive>
</div>
</template>

<script>
import shortid from 'shortid'
import { mapGetters, mapState } from 'vuex'
import '@/lib/ipcRenderer'
import electronStore from '@@/store'
Expand Down Expand Up @@ -39,25 +40,8 @@ export default {
methods: {
async initState () {
await this.setDefaultDataStore()
const storagePath = electronStore.preferences.get('storagePath')
const snippetListWidth = electronStore.app.get('snippetListWidth')
const sidebarWidth = electronStore.app.get('sidebarWidth')
const selectedFolderId = electronStore.app.get('selectedFolderId')
const selectedSnippetId = electronStore.app.get('selectedSnippetId')
const theme = electronStore.preferences.get('theme')
const snippetsSort = electronStore.app.get('snippetsSort')
this.$store.commit('app/SET_STORAGE_PATH', storagePath)
if (snippetListWidth) {
this.$store.commit('app/SET_SNIPPET_LIST_WIDTH', snippetListWidth)
}
if (sidebarWidth) {
this.$store.commit('app/SET_SIDEBAR_WIDTH', sidebarWidth)
}
if (selectedFolderId) {
this.$store.dispatch('folders/setSelectedFolder', selectedFolderId)
Expand All @@ -84,37 +68,10 @@ export default {
if (snippet) this.$store.dispatch('snippets/setSelected', snippet)
}
if (theme) {
this.$store.dispatch('app/setTheme', theme)
}
if (snippetsSort) {
this.$store.dispatch('snippets/setSort', snippetsSort)
}
this.$store.dispatch('tags/getTags')
await this.$store.dispatch('tags/getTags')
await this.$store.dispatch('folders/getFolders')
this.$store.commit('app/SET_INIT', true)
},
async setDefaultDataStore () {
const defaultFolder = {
list: [
{
id: shortid(),
name: 'Default',
open: false,
defaultLanguage: 'text'
}
],
_id: 'folders'
}
this.$db.masscode.insert(defaultFolder, (err, doc) => {
if (err) return
this.$store.dispatch('folders/getFolders')
})
await this.$store.dispatch('folders/getFolders')
}
}
}
Expand Down
32 changes: 26 additions & 6 deletions src/renderer/components/editor/MonacoEditor.vue
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ export default {
},
computed: {
...mapState(['app']),
...mapState(['app', 'preferences']),
...mapGetters('snippets', ['searchQuery']),
languagesMenu () {
return languages
Expand Down Expand Up @@ -107,6 +107,24 @@ export default {
watch: {
'app.theme' () {
this.setTheme()
},
'preferences.renderWhitespace' (v) {
this.editor.updateOptions({ renderWhitespace: v })
},
'preferences.wordWrap' (v) {
this.editor.updateOptions({ wordWrap: v })
},
'preferences.tabSize' (v) {
this.editor.getModel().updateOptions({
tabSize: v,
insertSpaces: this.preferences.insertSpaces
})
},
'preferences.insertSpaces' (v) {
this.editor.getModel().updateOptions({
tabSize: this.preferences.tabSize,
insertSpaces: v
})
}
},
Expand Down Expand Up @@ -143,7 +161,6 @@ export default {
minimap: {
enabled: false
},
tabSize: 4,
matchBrackets: 'never',
scrollbar: {
useShadows: false,
Expand All @@ -152,12 +169,15 @@ export default {
},
automaticLayout: true,
contextmenu: false,
scrollBeyondLastLine: false
scrollBeyondLastLine: false,
renderWhitespace: this.preferences.renderWhitespace,
wordWrap: this.preferences.wordWrap
})
// Обновление опций
this.editor
.getModel()
.updateOptions({ tabSize: 2, indentSize: 2, insertSpaces: true })
this.editor.getModel().updateOptions({
tabSize: this.preferences.tabSize,
insertSpaces: this.preferences.insertSpaces
})
// Отслеживание изменений модели редактора для обновления v-model
this.editor.onDidChangeModelContent(e => {
const value = this.editor.getValue()
Expand Down
102 changes: 102 additions & 0 deletions src/renderer/components/preferences/Editor.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
<template>
<AppForm>
<AppFormItem label="Tab size">
<AppInput v-model="tabSize" />
<div class="desc">
The number of spaces a tab is equal to.
</div>
</AppFormItem>
<AppFormItem label="Indent using">
<AppSelect
v-model="insertSpaces"
:options="insertSpacesOptions"
/>
<div class="desc">
Select type of indentation.
</div>
</AppFormItem>
<AppFormItem label="Whitespace">
<AppSelect
v-model="renderWhitespace"
:options="renderWhitespaceOptions"
/>
<div class="desc">
Controls how the editor should render whitespace characters.
</div>
</AppFormItem>
<AppFormItem label="Word wrapping">
<AppSelect
v-model="wordWrap"
:options="wordWrapOptions"
/>
<div class="desc">
Controls how lines should wrap.
</div>
</AppFormItem>
</AppForm>
</template>

<script>
import { mapState } from 'vuex'
export default {
name: 'Editor',
data () {
return {
renderWhitespaceOptions: [
{ label: 'None', value: 'none' },
{ label: 'Boundary', value: 'boundary' },
{ label: 'All', value: 'all' }
],
wordWrapOptions: [
{ label: 'Off', value: 'off' },
{ label: 'On', value: 'on' },
{ label: 'Column', value: 'wordWrapColumn' }
],
insertSpacesOptions: [
{ label: 'Spaces', value: true },
{ label: 'Tabs', value: false }
]
}
},
computed: {
...mapState(['preferences']),
renderWhitespace: {
get () {
return this.preferences.renderWhitespace
},
set (v) {
this.$store.dispatch('preferences/setWhitespaceType', v)
}
},
wordWrap: {
get () {
return this.preferences.wordWrap
},
set (v) {
this.$store.dispatch('preferences/setWordWrap', v)
}
},
tabSize: {
get () {
return this.preferences.tabSize
},
set (v) {
this.$store.dispatch('preferences/setTabSize', v)
}
},
insertSpaces: {
get () {
return this.preferences.insertSpaces
},
set (v) {
this.$store.dispatch('preferences/setInsertSpaces', JSON.parse(v))
}
}
}
}
</script>

<style lang="scss"></style>
2 changes: 1 addition & 1 deletion src/renderer/components/uikit/AppSelect.vue
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ export default {
props: {
value: {
type: String,
type: [String, Number, Boolean],
default: ''
},
options: {
Expand Down
Loading

0 comments on commit 9633700

Please sign in to comment.