|
|
@@ -61,8 +61,8 @@ export default class PageContainer extends Container {
|
|
|
createdAt: mainContent.getAttribute('data-page-created-at'),
|
|
|
updatedAt: mainContent.getAttribute('data-page-updated-at'),
|
|
|
|
|
|
+ isUserPage: JSON.parse(mainContent.getAttribute('data-page-user')) != null,
|
|
|
isTrashPage: isTrashPage(path),
|
|
|
- isForbidden: JSON.parse(mainContent.getAttribute('data-page-is-forbidden')),
|
|
|
isDeleted: JSON.parse(mainContent.getAttribute('data-page-is-deleted')),
|
|
|
isDeletable: JSON.parse(mainContent.getAttribute('data-page-is-deletable')),
|
|
|
isNotCreatable: JSON.parse(mainContent.getAttribute('data-page-is-not-creatable')),
|
|
|
@@ -107,14 +107,10 @@ export default class PageContainer extends Container {
|
|
|
this.initStateMarkdown();
|
|
|
this.checkAndUpdateImageUrlCached(this.state.likerUsers);
|
|
|
|
|
|
- const { currentUser } = this.appContainer;
|
|
|
-
|
|
|
- // check what kind of user
|
|
|
- this.state.isGuestUser = currentUser == null;
|
|
|
- this.state.isSharedUser = this.state.shareLinkId != null && currentUser == null;
|
|
|
+ const { isSharedUser } = this.appContainer;
|
|
|
|
|
|
// see https://dev.growi.org/5fabddf8bbeb1a0048bcb9e9
|
|
|
- const isAbleToGetAttachedInformationAboutPages = this.state.isPageExist && !this.state.isSharedUser;
|
|
|
+ const isAbleToGetAttachedInformationAboutPages = this.state.isPageExist && !isSharedUser;
|
|
|
|
|
|
if (isAbleToGetAttachedInformationAboutPages) {
|
|
|
this.retrieveSeenUsers();
|
|
|
@@ -152,11 +148,10 @@ export default class PageContainer extends Container {
|
|
|
|
|
|
|
|
|
get isAbleToOpenPageEditor() {
|
|
|
- const {
|
|
|
- isGuestUser, isPageForbidden, isNotCreatable, isTrashPage,
|
|
|
- } = this.state;
|
|
|
+ const { isNotCreatable, isTrashPage } = this.state;
|
|
|
+ const { isGuestUser } = this.appContainer;
|
|
|
|
|
|
- return (!isGuestUser && !isPageForbidden && !isNotCreatable && !isTrashPage);
|
|
|
+ return (!isNotCreatable && !isTrashPage && !isGuestUser);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -164,11 +159,65 @@ export default class PageContainer extends Container {
|
|
|
* ex.) like, bookmark
|
|
|
*/
|
|
|
get isAbleToShowPageReactionButtons() {
|
|
|
- const { isTrashPage, isPageExist, isSharedUser } = this.state;
|
|
|
+ const { isTrashPage, isPageExist } = this.state;
|
|
|
+ const { isSharedUser } = this.appContainer;
|
|
|
|
|
|
return (!isTrashPage && isPageExist && !isSharedUser);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * whether to display tag labels
|
|
|
+ */
|
|
|
+ get isAbleToShowTagLabel() {
|
|
|
+ const { isUserPage } = this.state;
|
|
|
+ const { isSharedUser } = this.appContainer;
|
|
|
+
|
|
|
+ return (!isUserPage && !isSharedUser);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * whether to display page management
|
|
|
+ * ex.) duplicate, rename
|
|
|
+ */
|
|
|
+ get isAbleToShowPageManagement() {
|
|
|
+ const { isPageExist, isPageInTrash } = this.state;
|
|
|
+ const { isSharedUser } = this.appContainer;
|
|
|
+
|
|
|
+ return (isPageExist && !isPageInTrash && !isSharedUser);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * whether to threeStrandedButton
|
|
|
+ * ex.) view, edit, hackmd
|
|
|
+ */
|
|
|
+ get isAbleToShowThreeStrandedButton() {
|
|
|
+ const { isNotCreatable, isPageInTrash } = this.state;
|
|
|
+ const { isSharedUser, isGuestUser } = this.appContainer;
|
|
|
+
|
|
|
+ return (!isNotCreatable && !isPageInTrash && !isSharedUser && !isGuestUser);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * whether to threeStrandedButton
|
|
|
+ * ex.) view, edit, hackmd
|
|
|
+ */
|
|
|
+ get isAbleToShowPageAuthors() {
|
|
|
+ const { isPageExist, isUserPage } = this.state;
|
|
|
+
|
|
|
+ return (isPageExist && !isUserPage);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * whether to like button
|
|
|
+ * not displayed on user page
|
|
|
+ */
|
|
|
+ get isAbleToShowLikeButton() {
|
|
|
+ const { isUserPage } = this.state;
|
|
|
+ const { isSharedUser } = this.appContainer;
|
|
|
+
|
|
|
+ return (!isUserPage && !isSharedUser);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* initialize state for markdown data
|
|
|
*/
|
|
|
@@ -243,12 +292,18 @@ export default class PageContainer extends Container {
|
|
|
return this.appContainer.getContainer('NavigationContainer');
|
|
|
}
|
|
|
|
|
|
- setLatestRemotePageData(page, user) {
|
|
|
- this.setState({
|
|
|
- remoteRevisionId: page.revision._id,
|
|
|
- revisionIdHackmdSynced: page.revisionHackmdSynced,
|
|
|
- lastUpdateUsername: user.name,
|
|
|
- });
|
|
|
+ setLatestRemotePageData(s2cMessagePageUpdated) {
|
|
|
+ const newState = {
|
|
|
+ remoteRevisionId: s2cMessagePageUpdated.revisionId,
|
|
|
+ revisionIdHackmdSynced: s2cMessagePageUpdated.revisionIdHackmdSynced,
|
|
|
+ lastUpdateUsername: s2cMessagePageUpdated.lastUpdateUsername,
|
|
|
+ };
|
|
|
+
|
|
|
+ if (s2cMessagePageUpdated.hasDraftOnHackmd != null) {
|
|
|
+ newState.hasDraftOnHackmd = s2cMessagePageUpdated.hasDraftOnHackmd;
|
|
|
+ }
|
|
|
+
|
|
|
+ this.setState(newState);
|
|
|
}
|
|
|
|
|
|
setTocHtml(tocHtml) {
|
|
|
@@ -497,9 +552,10 @@ export default class PageContainer extends Container {
|
|
|
|
|
|
logger.debug({ obj: data }, `websocket on 'page:create'`); // eslint-disable-line quotes
|
|
|
|
|
|
- // update PageStatusAlert
|
|
|
- if (data.page.path === pageContainer.state.path) {
|
|
|
- this.setLatestRemotePageData(data.page, data.user);
|
|
|
+ // update remote page data
|
|
|
+ const { s2cMessagePageUpdated } = data;
|
|
|
+ if (s2cMessagePageUpdated.pageId === pageContainer.state.pageId) {
|
|
|
+ pageContainer.setLatestRemotePageData(s2cMessagePageUpdated);
|
|
|
}
|
|
|
});
|
|
|
|
|
|
@@ -511,16 +567,10 @@ export default class PageContainer extends Container {
|
|
|
|
|
|
logger.debug({ obj: data }, `websocket on 'page:update'`); // eslint-disable-line quotes
|
|
|
|
|
|
- if (data.page.path === pageContainer.state.path) {
|
|
|
- // update PageStatusAlert
|
|
|
- pageContainer.setLatestRemotePageData(data.page, data.user);
|
|
|
- // update remote data
|
|
|
- const page = data.page;
|
|
|
- pageContainer.setState({
|
|
|
- remoteRevisionId: page.revision._id,
|
|
|
- revisionIdHackmdSynced: page.revisionHackmdSynced,
|
|
|
- hasDraftOnHackmd: page.hasDraftOnHackmd,
|
|
|
- });
|
|
|
+ // update remote page data
|
|
|
+ const { s2cMessagePageUpdated } = data;
|
|
|
+ if (s2cMessagePageUpdated.pageId === pageContainer.state.pageId) {
|
|
|
+ pageContainer.setLatestRemotePageData(s2cMessagePageUpdated);
|
|
|
}
|
|
|
});
|
|
|
|
|
|
@@ -532,9 +582,10 @@ export default class PageContainer extends Container {
|
|
|
|
|
|
logger.debug({ obj: data }, `websocket on 'page:delete'`); // eslint-disable-line quotes
|
|
|
|
|
|
- // update PageStatusAlert
|
|
|
- if (data.page.path === pageContainer.state.path) {
|
|
|
- pageContainer.setLatestRemotePageData(data.page, data.user);
|
|
|
+ // update remote page data
|
|
|
+ const { s2cMessagePageUpdated } = data;
|
|
|
+ if (s2cMessagePageUpdated.pageId === pageContainer.state.pageId) {
|
|
|
+ pageContainer.setLatestRemotePageData(s2cMessagePageUpdated);
|
|
|
}
|
|
|
});
|
|
|
|
|
|
@@ -546,7 +597,9 @@ export default class PageContainer extends Container {
|
|
|
|
|
|
logger.debug({ obj: data }, `websocket on 'page:editingWithHackmd'`); // eslint-disable-line quotes
|
|
|
|
|
|
- if (data.page.path === pageContainer.state.path) {
|
|
|
+ // update isHackmdDraftUpdatingInRealtime
|
|
|
+ const { s2cMessagePageUpdated } = data;
|
|
|
+ if (s2cMessagePageUpdated.pageId === pageContainer.state.pageId) {
|
|
|
pageContainer.setState({ isHackmdDraftUpdatingInRealtime: true });
|
|
|
}
|
|
|
});
|