diff --git a/oreClient/src/main/assets/pages/project/ProjectDocs.vue b/oreClient/src/main/assets/pages/project/ProjectDocs.vue index 2624d1d8d..491dda220 100644 --- a/oreClient/src/main/assets/pages/project/ProjectDocs.vue +++ b/oreClient/src/main/assets/pages/project/ProjectDocs.vue @@ -191,7 +191,7 @@ import Editor from '../../components/Editor' import MemberList from '../../components/MemberList' import { Category } from '../../enums' import PageList from '../../components/PageList' -import { genericError, notFound, numberWithCommas } from '../../utils' +import { genericError, notFound, numberWithCommas, slugify } from '../../utils' import Modal from '../../components/Modal' export default { @@ -339,14 +339,15 @@ export default { content = page.content ? page.content : 'Welcome to your new page' } let action + let pageSlug if (this.newPage) { - const pageSlug = page.parent ? page.parent + '/' + page.name : page.name + pageSlug = page.parent ? page.parent + '/' + slugify(page.name) : slugify(page.name) action = API.projectRequest(this.project.namespace, '_pages/' + pageSlug, 'PUT', { name: page.name, content, }) } else { - const pageSlug = page.oldParent ? page.oldParent + '/' + page.oldName : page.oldName + pageSlug = page.oldParent ? page.oldParent + '/' + slugify(page.oldName) : slugify(page.oldName) action = API.projectRequest(this.project.namespace, '_pages/' + pageSlug, 'PATCH', { name: page.name, content, @@ -356,9 +357,19 @@ export default { action .then((res) => { + const currentJoinedPage = this.joinedPage this.$refs.editPageModal.toggle() - this.resetPutPage() - this.updatePage(true) + if (currentJoinedPage === pageSlug) { + // TODO: Route to the created page without data races + // We should really call updatePage here too, but then we get a 404 + this.$router.push({ + name: 'project_home', + params: { project: this.project, permissions: this.permissions }, + }) + } else { + this.resetPutPage() + this.updatePage(true) + } }) .catch((err) => { // TODO: Better error handling here @@ -382,7 +393,7 @@ export default { }, deletePage() { const page = this.requestPage - const pageSlug = page.parent ? page.parent + '/' + page.name : page.name + const pageSlug = page.parent ? page.parent + '/' + slugify(page.name) : slugify(page.name) API.projectRequest(this.project.namespace, '_pages/' + pageSlug, 'DELETE') .then((res) => { @@ -390,7 +401,10 @@ export default { this.resetPutPage() if (pageSlug === this.joinedPage) { - this.$router.push({ name: 'home', params: { project: this.project, permissions: this.permissions } }) + this.$router.push({ + name: 'project_home', + params: { project: this.project, permissions: this.permissions }, + }) } else { this.updatePage(true) } diff --git a/oreClient/src/main/assets/pages/project/VersionPage.vue b/oreClient/src/main/assets/pages/project/VersionPage.vue index b63d8b969..71aeea56b 100644 --- a/oreClient/src/main/assets/pages/project/VersionPage.vue +++ b/oreClient/src/main/assets/pages/project/VersionPage.vue @@ -800,7 +800,7 @@ export default { this.spinIcon = true if (Object.entries(patchVersion).length) { - API.versionRequest(this.project.namespace, this.version, 'PATCH', patchVersion).then((res) => { + API.versionRequest(this.project.namespace, this.version, '', 'PATCH', patchVersion).then((res) => { this.spinIcon = false this.editVersion = false this.versionObj = res diff --git a/oreClient/src/main/assets/utils.js b/oreClient/src/main/assets/utils.js index d9693640d..340b2ad64 100644 --- a/oreClient/src/main/assets/utils.js +++ b/oreClient/src/main/assets/utils.js @@ -81,3 +81,13 @@ export function genericError(self, error) { message: error, }) } + +export function compact(str) { + return str.trim().replaceAll(/ +/g, ' ') +} + +export function slugify(str) { + const replaceRegex = /[^a-z\-_.0-9]/g + const replaced = compact(str).toLowerCase().replaceAll(' ', '-').replaceAll(replaceRegex, '') + return replaced.substring(0, Math.min(32, replaced.length)) +} diff --git a/orePlayCommon/app/views/layout/base.scala.html b/orePlayCommon/app/views/layout/base.scala.html index 42926e213..f8b5f7b7d 100644 --- a/orePlayCommon/app/views/layout/base.scala.html +++ b/orePlayCommon/app/views/layout/base.scala.html @@ -88,6 +88,7 @@ }