Skip to content

Commit

Permalink
Loading and emoji preview
Browse files Browse the repository at this point in the history
  • Loading branch information
danon committed Nov 30, 2023
1 parent 2064522 commit a885a3f
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 5 deletions.
5 changes: 4 additions & 1 deletion resources/js/components/forms/editor.vue
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import Vue from 'vue';
import Component from 'vue-class-component';
import {Emit, Prop, Ref, Watch} from "vue-property-decorator";
import {CodeBlockLanguages, Editor4Play, EditorState} from "@riddled/4play";
import {CodeBlockLanguages, Editor4Play, EditorState, EmojiUrl} from "@riddled/4play";
@Component
export default class VueEditor extends Vue {
Expand All @@ -18,6 +18,8 @@ export default class VueEditor extends Vue {
readonly placeholder!: string;
@Prop()
readonly autocompleteSource!: Function
@Prop()
readonly emojiUrl!: EmojiUrl
@Ref('view')
readonly view!: HTMLElement;
Expand All @@ -33,6 +35,7 @@ export default class VueEditor extends Vue {
username => this.autocompleteSource(username),
'Zwykły tekst',
this.codeBlockLanguages(),
this.emojiUrl,
);
}
Expand Down
27 changes: 24 additions & 3 deletions resources/js/components/forms/emoji-picker.vue
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<template>
<div class="emoji-picker" v-on-clickaway="blur">
<div class="card card-body">
<div style="display:flex; flex-direction:column;">
<div style="display:flex; flex-direction:column;" v-if="complete">
<div class="emoji-grid">
<div class="emoji-scroll" @mouseleave="mouseLeave">
<div class="category" v-for="category in emojis.categories">
Expand Down Expand Up @@ -44,24 +44,41 @@
</button>
</div>
</div>
<div class="loading" v-else>
Ładowanie...
</div>
</div>
</div>
</template>

<script>
import {mixin as clickAway} from 'vue-clickaway';
function onIdle(callback) {
if ("requestIdleCallback" in window) {
window.requestIdleCallback(callback);
} else {
setTimeout(callback, 500);
}
}
export default {
mixins: [clickAway],
props: {
emojis: {require: true},
},
data() {
return {
complete: false,
searchPhrase: '',
emoji: null,
};
},
mounted() {
onIdle(() => {
this.complete = true;
});
},
methods: {
select(emoji) {
this.$emit('input', emoji);
Expand Down Expand Up @@ -107,8 +124,12 @@ export default {
this.emoji = null;
},
isDesktop() {
const style = window.getComputedStyle(this.$refs["close-button"]);
return style.display === 'none';
const closeButton = this.$refs["close-button"];
if (closeButton) {
const style = window.getComputedStyle(closeButton);
return style.display === 'none';
}
return false;
}
},
computed: {
Expand Down
11 changes: 10 additions & 1 deletion resources/js/components/forms/markdown.vue
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
placeholder="Kliknij, aby dodać treść..."
:autocompleteSource="autocomplete"
v-paste:success="addAsset"
:emojiUrl="emojiUrl"
@submit="save"
@cancel="cancel"
@state="updateState"/>
Expand All @@ -35,7 +36,7 @@

<div v-show="isPreview" v-html="previewHtml" class="preview post-content"/>

<div v-if="emojiPickerOpen" class="emoji-picker-container">
<div v-show="emojiPickerOpen" class="emoji-picker-container">
<div class="triangle"/>
<vue-emoji-picker
ref="emoji-picker"
Expand Down Expand Up @@ -467,6 +468,14 @@ export default class VueMarkdown extends Vue {
return false;
}
emojiUrl(emojiName: string) {
const emoticon = this.emojis?.emoticons[emojiName];
if (emoticon) {
return 'https://cdn.jsdelivr.net/gh/twitter/[email protected]/assets/svg/' + emoticon.unified + '.svg'
}
return '';
}
focus() {
this.editor.focus();
}
Expand Down
5 changes: 5 additions & 0 deletions resources/sass/components/forms/_emoji-picker.scss
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,11 @@
}
}
}

.loading {
padding: 1.75rem;
text-align: center;
}
}
}
}

0 comments on commit a885a3f

Please sign in to comment.