diff --git a/src/components/nodes/NodeView.vue b/src/components/nodes/NodeView.vue
index fbeca4f..588f34d 100644
--- a/src/components/nodes/NodeView.vue
+++ b/src/components/nodes/NodeView.vue
@@ -11,6 +11,7 @@
v-bind="{ node, mode, showOrigin }"
class="node-view-header"
:class="{ scrolling: scrollValue }"
+ :first-char="firstChar"
/>
@@ -63,7 +64,8 @@ export default {
forceType: { type: String, default: null },
mode: { type: String, default: 'view' },
preview: { type: Boolean, default: false },
- showOrigin: { type: Boolean, default: false }
+ showOrigin: { type: Boolean, default: false },
+ firstChar: { type: [String, null], default: null }
},
data () {
diff --git a/src/components/nodes/NodeViewHeaderProd.vue b/src/components/nodes/NodeViewHeaderProd.vue
index aa45656..a6967a6 100644
--- a/src/components/nodes/NodeViewHeaderProd.vue
+++ b/src/components/nodes/NodeViewHeaderProd.vue
@@ -33,7 +33,8 @@ export default {
props: {
node: { type: Object, required: true },
mode: { type: String, required: true },
- showOrigin: { type: Boolean, required: true }
+ showOrigin: { type: Boolean, required: true },
+ firstChar: { type: [String, null], default: null }
},
computed: {
diff --git a/src/components/nodes/NodeViewHeaderRef.vue b/src/components/nodes/NodeViewHeaderRef.vue
index fa964d2..c9b0b8a 100644
--- a/src/components/nodes/NodeViewHeaderRef.vue
+++ b/src/components/nodes/NodeViewHeaderRef.vue
@@ -16,6 +16,7 @@
:node="node" tag="h4"
block edition url
class="mr-auto"
+ :first-char="firstChar"
/>
@@ -36,7 +37,8 @@ export default {
props: {
node: { type: Object, required: true },
- mode: { type: String, required: true }
+ mode: { type: String, required: true },
+ firstChar: { type: [String, null], default: null }
},
methods: {
diff --git a/src/components/nodes/NodeViewTitle.vue b/src/components/nodes/NodeViewTitle.vue
index 83403e9..62b1626 100644
--- a/src/components/nodes/NodeViewTitle.vue
+++ b/src/components/nodes/NodeViewTitle.vue
@@ -11,7 +11,7 @@
>
- {{ toCommaList(node.authors) }},
+ {{ authors }},
@@ -44,7 +44,8 @@ export default {
block: { type: Boolean, default: false },
edition: { type: Boolean, default: false },
noDate: { type: Boolean, default: false },
- url: { type: Boolean, default: false }
+ url: { type: Boolean, default: false },
+ firstChar: { type: [String, null], default: null }
},
data () {
@@ -52,6 +53,20 @@ export default {
}
},
+ computed: {
+ authors () {
+ if (!this.firstChar || this.node.authors.length < 2) return toCommaList(this.node.authors)
+ const authors = [...this.node.authors].sort((a, b) => a.last_name.localeCompare(b.last_name))
+ const first = this.node.authors.filter(author => author.last_name.startsWith(this.firstChar))
+ first.forEach((author) => {
+ const index = authors.indexOf(author)
+ authors.splice(index, 1)
+ authors.unshift(author)
+ })
+ return toCommaList(authors)
+ }
+ },
+
methods: {
trim,
toCommaList,
diff --git a/src/pages/library/LibraryList.vue b/src/pages/library/LibraryList.vue
index ecde3bf..d4972c2 100644
--- a/src/pages/library/LibraryList.vue
+++ b/src/pages/library/LibraryList.vue
@@ -17,6 +17,7 @@
@open-node="$emit('open-node', $event)"
@open-child="$emit('open-node', { parentId: node.id, ...$event })"
:style="`--opacity: ${getStrangenessOpacity(strangeness, node)};`"
+ :first-char="char"
/>
diff --git a/src/store/modules/library.js b/src/store/modules/library.js
index 84cf183..a7c7ed0 100644
--- a/src/store/modules/library.js
+++ b/src/store/modules/library.js
@@ -272,8 +272,7 @@ export default {
return [group[0], group[1].sort((a, b) => {
const prev = a.last_name.toLowerCase()
const next = b.last_name.toLowerCase()
- if (prev === next) return 0
- return prev < next ? -1 : 1
+ return prev.localeCompare(next)
}).map(node => node.node)]
})
},