diff --git a/src/App.vue b/src/App.vue index 9368b75947..b6dd75210b 100644 --- a/src/App.vue +++ b/src/App.vue @@ -779,6 +779,7 @@ h2 { border: 1px solid $blue; border-radius: 5px; color: $blue; + cursor: pointer; font-size: 0.9em; padding: 3px 4px; diff --git a/src/assets/500.gif b/src/assets/500.gif deleted file mode 100644 index 219a0e517e..0000000000 Binary files a/src/assets/500.gif and /dev/null differ diff --git a/src/assets/illustrations/404.png b/src/assets/illustrations/404.png index 6b0acb2846..76326765c5 100644 Binary files a/src/assets/illustrations/404.png and b/src/assets/illustrations/404.png differ diff --git a/src/assets/illustrations/500.png b/src/assets/illustrations/500.png index ad435f325a..27357f3d5e 100644 Binary files a/src/assets/illustrations/500.png and b/src/assets/illustrations/500.png differ diff --git a/src/assets/illustrations/empty_asset.png b/src/assets/illustrations/empty_asset.png index 7559bfbff7..f226491e14 100644 Binary files a/src/assets/illustrations/empty_asset.png and b/src/assets/illustrations/empty_asset.png differ diff --git a/src/assets/illustrations/empty_edit.png b/src/assets/illustrations/empty_edit.png index 4bc9e64471..6dbdad4e16 100644 Binary files a/src/assets/illustrations/empty_edit.png and b/src/assets/illustrations/empty_edit.png differ diff --git a/src/assets/illustrations/empty_production.png b/src/assets/illustrations/empty_production.png index 6ee8a01c82..6dbdad4e16 100644 Binary files a/src/assets/illustrations/empty_production.png and b/src/assets/illustrations/empty_production.png differ diff --git a/src/assets/illustrations/empty_shot.png b/src/assets/illustrations/empty_shot.png index 4bc9e64471..6dbdad4e16 100644 Binary files a/src/assets/illustrations/empty_shot.png and b/src/assets/illustrations/empty_shot.png differ diff --git a/src/assets/illustrations/empty_todo.png b/src/assets/illustrations/empty_todo.png index cbc4de35fd..8f9b481646 100644 Binary files a/src/assets/illustrations/empty_todo.png and b/src/assets/illustrations/empty_todo.png differ diff --git a/src/components/lists/TaskList.vue b/src/components/lists/TaskList.vue index 0e83591b08..d118d3ab57 100644 --- a/src/components/lists/TaskList.vue +++ b/src/components/lists/TaskList.vue @@ -1036,6 +1036,10 @@ td.retake-count { } } +.error { + color: $red; +} + input[type='number']::-webkit-outer-spin-button, input[type='number']::-webkit-inner-spin-button { -webkit-appearance: none; diff --git a/src/components/lists/TodosList.vue b/src/components/lists/TodosList.vue index 8f5cf8146e..c0b0017cfa 100644 --- a/src/components/lists/TodosList.vue +++ b/src/components/lists/TodosList.vue @@ -27,6 +27,10 @@ > {{ $t('tasks.fields.entity') }} + + {{ $t('assets.fields.episode') }} + + {{ $t('tasks.fields.assignees') }} @@ -114,6 +118,13 @@ + + +
+ {{ assetEpisodes(entry, false) }} +
+ + task.source_id || task.episode_names?.length > 0 + ) } }, methods: { ...mapActions([]), + assetEpisodes(entry, full) { + if ( + ['Episode', 'Sequence', 'Shot', 'Edit'].includes(entry.entity_type_name) + ) + return '' + const mainEpisodeName = entry.episode_name || 'MP' + const episodeNames = (entry.episode_names || []).filter( + name => name !== mainEpisodeName + ) + let episodeNameString = '' + if (episodeNames.length > 2) { + if (full) { + episodeNameString = episodeNames.join(', ') + } else { + episodeNameString = episodeNames.slice(0, 2).join(', ') + ', ...' + } + } else if (episodeNames.length > 0) { + episodeNameString = episodeNames.join(', ') + } + return episodeNames.length > 0 + ? mainEpisodeName + ', ' + episodeNameString + : mainEpisodeName + }, + setScrollPosition(scrollPosition) { if (this.$refs.body) { this.$refs.body.scrollTop = scrollPosition @@ -760,10 +801,16 @@ td.end-date { .empty-list img { max-width: 80vh; + -webkit-filter: brightness(103%); } .entity-name { color: var(--text); font-weight: bold; } + +.episode { + min-width: 130px; + width: 130px; +} diff --git a/src/components/mixins/player.js b/src/components/mixins/player.js index 10c32f4eb5..a057a39407 100644 --- a/src/components/mixins/player.js +++ b/src/components/mixins/player.js @@ -1295,26 +1295,15 @@ export const playerMixin = { return false }, - onTimeCodeClicked({ - versionRevision, - minutes, - seconds, - milliseconds, - frame - }) { + onTimeCodeClicked({ versionRevision, frame }) { const previews = this.currentEntity.preview_files[this.task.task_type_id] const previewFile = previews.find( p => p.revision === parseInt(versionRevision) ) this.onPreviewChanged(this.currentEntity, previewFile) - const time = - parseInt(minutes) * 60 + - parseInt(seconds) + - parseInt(milliseconds) / 1000 setTimeout(() => { - const frameNumber = time / this.frameDuration - this.rawPlayer.setCurrentFrame(frameNumber) - this.onFrameUpdate(frameNumber) + this.rawPlayer.setCurrentFrame(frame) + this.onFrameUpdate(frame) this.syncComparisonPlayer() }, 20) }, diff --git a/src/components/modals/EditCommentModal.vue b/src/components/modals/EditCommentModal.vue index 13e053d2fd..ffa0672aeb 100644 --- a/src/components/modals/EditCommentModal.vue +++ b/src/components/modals/EditCommentModal.vue @@ -180,6 +180,14 @@ export default { type: Boolean, default: false }, + frame: { + type: Number, + default: 0 + }, + commentToEdit: { + type: Object, + default: () => {} + }, isLoading: { type: Boolean, default: false @@ -188,10 +196,6 @@ export default { type: Boolean, default: false }, - commentToEdit: { - type: Object, - default: () => {} - }, team: { type: Array, default: () => [] @@ -203,10 +207,6 @@ export default { revision: { type: Number, default: 1 - }, - time: { - type: Number, - default: 0 } }, @@ -302,10 +302,11 @@ export default { onAtTextChanged(input) { if (input.includes('@frame')) { + const time = this.frame / this.fps this.form.text = replaceTimeWithTimecode( input, this.revision, - this.time, + time, this.fps ) } diff --git a/src/components/pages/Breakdown.vue b/src/components/pages/Breakdown.vue index 7cf4bf81ce..3227b18440 100644 --- a/src/components/pages/Breakdown.vue +++ b/src/components/pages/Breakdown.vue @@ -416,6 +416,7 @@ export default { if (!this.isLoading) { this.reset() } + this.resetSequenceOption() this.setLastProductionScreen('breakdown') this.isTextMode = localStorage.getItem('breakdown:text-mode') === 'true' window.addEventListener('keydown', this.onKeyDown, false) @@ -702,6 +703,7 @@ export default { } else { this.setCastingSequence(this.sequenceId || 'all') } + this.resetSequenceOption() this.resetSelection() if ( (this.currentEpisode && this.currentEpisode.id === 'main') || @@ -713,6 +715,12 @@ export default { }) }, + resetSequenceOption() { + if (this.currentProduction.production_style === 'nft') { + this.sequenceId = this.castingSequencesOptions[1].value + } + }, + resetSelection() { const selection = {} if (this.isEpisodeCasting) { diff --git a/src/components/pages/NotFound.vue b/src/components/pages/NotFound.vue index e9f68d22cd..f4107f9025 100644 --- a/src/components/pages/NotFound.vue +++ b/src/components/pages/NotFound.vue @@ -32,6 +32,7 @@ export default { } p { + color: var(--text); font-size: 1.3em; padding-bottom: 1em; @@ -39,4 +40,10 @@ p { text-decoration: underline; } } + +.title { + color: var(--text); + font-weight: bold; + font-size: 2.6em; +} diff --git a/src/components/pages/ServerDown.vue b/src/components/pages/ServerDown.vue index bb281f0554..bd6810e613 100644 --- a/src/components/pages/ServerDown.vue +++ b/src/components/pages/ServerDown.vue @@ -32,7 +32,6 @@ export default { diff --git a/src/components/pages/Task.vue b/src/components/pages/Task.vue index 2d87a71fc7..d43cdd409e 100644 --- a/src/components/pages/Task.vue +++ b/src/components/pages/Task.vue @@ -121,7 +121,7 @@ @change-current-preview="changeCurrentPreview" @remove-extra-preview="onRemoveExtraPreviewClicked" @previews-order-changed="onPreviewsOrderChanged" - @time-updated="onTimeUpdated" + @frame-updated="onFrameUpdated" v-if="currentPreview" /> @@ -174,6 +174,7 @@
diff --git a/src/components/previews/PreviewPlayer.vue b/src/components/previews/PreviewPlayer.vue index c6c3122104..0594057de4 100644 --- a/src/components/previews/PreviewPlayer.vue +++ b/src/components/previews/PreviewPlayer.vue @@ -98,7 +98,7 @@ :task="task" :is-preview="false" :silent="isCommentsHidden" - :current-time-raw="currentTimeRaw" + :current-frame="currentFrame" :current-parent-preview="currentPreview" @comment-added="$emit('comment-added')" @time-code-clicked="timeCodeClicked" @@ -992,6 +992,7 @@ export default { this.currentTimeRaw = time this.currentTime = this.formatTime(time) this.progress.updateProgressBar(frame) + this.$emit('frame-updated', frame) if (!this.isPlaying) { this.syncComparisonViewer() diff --git a/src/components/sides/TaskInfo.vue b/src/components/sides/TaskInfo.vue index bfd04d49b0..a678b4d17e 100644 --- a/src/components/sides/TaskInfo.vue +++ b/src/components/sides/TaskInfo.vue @@ -105,7 +105,7 @@ @remove-extra-preview="onRemoveExtraPreview" @previews-order-change="onPreviewsOrderChange" @comment-added="onCommentAdded" - @time-updated="onTimeUpdated" + @frame-updated="onFrameUpdated" ref="preview-player" /> @@ -135,7 +135,7 @@ :is-error="errors.addComment" :is-max-retakes-error="errors.addCommentMaxRetakes" :fps="parseInt(currentFps)" - :time="isPreview ? currentTime : currentTimeRaw" + :frame="currentFrame || currentFrameRaw" :revision="currentRevision" :is-movie="isMoviePreview" @add-comment="addComment" @@ -172,7 +172,7 @@ isCurrentUserAdmin " :fps="parseInt(currentFps)" - :time="isPreview ? currentTime : currentTimeRaw" + :frame="currentFrame || currentFrameRaw" :revision="currentRevision" @duplicate-comment="onDuplicateComment" @pin-comment="onPinComment" @@ -220,13 +220,13 @@ @@ -325,6 +325,10 @@ export default { type: Object, default: () => {} }, + currentFrame: { + type: Number, + default: 0 + }, isLoading: { type: Boolean, default: true @@ -333,10 +337,6 @@ export default { type: Boolean, default: true }, - currentTimeRaw: { - type: Number, - default: 0 - }, currentParentPreview: { type: Object, default: null @@ -360,10 +360,10 @@ export default { addExtraPreviewFormData: null, animOn: false, previewForms: [], + currentFrameRaw: 0, currentPreviewIndex: 0, currentPreviewPath: '', currentPreviewDlPath: '', - currentTime: 0, commentToEdit: null, isWide: false, isExtraWide: false, @@ -1129,8 +1129,8 @@ export default { }, 20) }, - onTimeUpdated(time) { - this.currentTime = time + onFrameUpdated(frame) { + this.currentFrameRaw = frame }, async extractAnnotationSnapshots() { diff --git a/src/components/widgets/AddComment.vue b/src/components/widgets/AddComment.vue index 1640a24b6f..019f75e5b7 100644 --- a/src/components/widgets/AddComment.vue +++ b/src/components/widgets/AddComment.vue @@ -79,10 +79,10 @@ ${match}` + >${match}` } ) } diff --git a/src/locales/en.js b/src/locales/en.js index f109250f20..d0c0961b7e 100644 --- a/src/locales/en.js +++ b/src/locales/en.js @@ -588,8 +588,8 @@ export default { }, not_found: { - text: 'There was something wrong with the link you clicked on, we encourage you to come back to the home page.', - title: 'Page not found... are you looking for something you deleted?' + text: 'There was something wrong with the link you clicked on, the target was not found. We encourage you to come back to the home page.', + title: 'Page not found...' }, notifications: { @@ -1218,8 +1218,8 @@ export default { }, server_down: { - text: 'Please contact your vendor support, your system administrator or your IT department to understand what is going wrong.', - title: 'Kitsu encountered an error while reaching its data API.' + text: 'Please contact our support, your system administrator or your IT department to understand what is going wrong.', + title: 'Kitsu encountered an error while reaching its data API' }, statistics: {