Skip to content
This repository was archived by the owner on Sep 13, 2023. It is now read-only.

Commit 6acc965

Browse files
Fixes #91: Frequently used file types
1 parent 5605322 commit 6acc965

File tree

4 files changed

+56
-11
lines changed

4 files changed

+56
-11
lines changed

package-lock.json

Lines changed: 21 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,8 @@
7878
"vue-clipboard2": "0.0.8",
7979
"vue-electron": "^1.0.6",
8080
"vue-router": "^3.0.2",
81-
"vuex": "^3.1.0"
81+
"vue-select": "^3.2.0",
82+
"vuex": "^3.0.1"
8283
},
8384
"devDependencies": {
8485
"babel-core": "^6.25.0",

src/renderer/components/modals/create-note-modal/CreateNoteModal.html

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,14 @@ <h2 class="text-red" v-if="displayDupError">Oh sorry, you can't have duplicated
5454
</b-field>
5555

5656
<b-field horizontal label="Language">
57-
<b-select placeholder="Select a language" v-model="file.language">
58-
<option
59-
v-for="language in languages"
60-
:value="language.name">
61-
{{ language.name | capitalize }}
62-
</option>
63-
</b-select>
57+
<v-select style="width: 186px" label="Language" :options="sortedLanguagesByUse" placeholder="Select a language"
58+
v-model="file.language" :reduce="selectedLanguage => selectedLanguage.name">
59+
<template v-slot:option="option">
60+
{{ option.name | capitalize }}
61+
</template>
62+
</v-select>
63+
<b-button pill v-for="languageTag in sortedLanguagesByUse.slice(0,3)" :style="'background-color: ' + stringToColour(languageTag.name) + '; color: #fff;'"
64+
:key="languageTag.name" @click="file.language = languageTag.name">{{languageTag.name}}</b-button>
6465
</b-field>
6566

6667
<b-field horizontal label="Content">

src/renderer/components/modals/create-note-modal/CreateNoteModal.vue

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import { mapGetters, mapActions } from 'vuex';
55
import editor from '@/components/editor/Editor';
66
import languages from '@/assets/data/languages.json';
77
import converter from '@/converter';
8+
import vSelect from 'vue-select';
9+
import ColorHash from 'color-hash';
810
911
const noteNameCharacters = 'abcdef0123456789';
1012
@@ -17,7 +19,7 @@ const generateNoteName = () => {
1719
1820
export default {
1921
name: 'cn-create-note-modal',
20-
components: { editor },
22+
components: { editor, vSelect },
2123
data() {
2224
return {
2325
note: {
@@ -101,14 +103,35 @@ export default {
101103
getNoteType() {
102104
return (this.gistsSelected) ? 'gist' : 'note';
103105
},
106+
stringToColour(str) {
107+
const colorHash = new ColorHash({ lightness: 0.5, saturation: 0.6 });
108+
return colorHash.hex(str);
109+
},
104110
},
105111
computed: {
106-
...mapGetters(['gistsSelected']),
112+
...mapGetters(['gistsSelected', 'notes']),
107113
isDisabled() {
108114
return this.files.some(file => !/\S/.test(file.content));
109115
},
116+
sortedLanguagesByUse() {
117+
this.languages.forEach((language) => { language.frequency = 0; });
118+
this.notes.forEach((note) => {
119+
Object.keys(note.files).forEach((file) => {
120+
const languageUsed = this.languages.find(language =>
121+
note.files[file].language === language.name);
122+
languageUsed.frequency ? (languageUsed.frequency += 1)
123+
: (languageUsed.frequency = 1);
124+
});
125+
});
126+
const sortedArray = this.languages
127+
.slice()
128+
.sort((a, b) =>
129+
(a.frequency > b.frequency ? -1 : a.frequency < b.frequency ? 1 : 0));
130+
return sortedArray;
131+
},
110132
},
111133
};
112134
</script>
113135

114136
<style src="./CreateNoteModal.scss" lang="scss"></style>
137+
<style src="vue-select/dist/vue-select.css"></style>

0 commit comments

Comments
 (0)