Skip to content

Commit 4939831

Browse files
committed
feat(pad-settings): added possibility to delete pad by the creator
1 parent ac44898 commit 4939831

File tree

10 files changed

+84
-15
lines changed

10 files changed

+84
-15
lines changed

pnpm-lock.yaml

Lines changed: 0 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/locales/de.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,9 @@
8282
"pad.settings.colorcheck": "Autorenfarben anzeigen",
8383
"pad.settings.linenocheck": "Zeilennummern",
8484
"pad.settings.rtlcheck": "Inhalt von rechts nach links lesen?",
85-
"pad.settings.fontType": "Schriftart:",
85+
"pad.settings.delete": "Pad löschen",
86+
"pad.delete.confirm": "Möchtest du dieses Pad wirklich löschen?",
87+
"pad.settings.fontType": "Schriftart:",
8688
"pad.settings.fontType.normal": "Normal",
8789
"pad.settings.language": "Sprache:",
8890
"pad.settings.about": "Über",

src/locales/en.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@
7272
"pad.settings.fontType": "Font type:",
7373
"pad.settings.fontType.normal": "Normal",
7474
"pad.settings.language": "Language:",
75+
"pad.settings.deletePad": "Delete Pad",
76+
"pad.delete.confirm": "Do you really want to delete this pad?",
7577
"pad.settings.about": "About",
7678
"pad.settings.poweredBy": "Powered by",
7779

src/node/handler/PadMessageHandler.ts

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ import {RateLimiterMemory} from 'rate-limiter-flexible';
4343
import {ChangesetRequest, PadUserInfo, SocketClientRequest} from "../types/SocketClientRequest";
4444
import {APool, AText, PadAuthor, PadType} from "../types/PadType";
4545
import {ChangeSet} from "../types/ChangeSet";
46-
import {ChatMessageMessage, ClientReadyMessage, ClientSaveRevisionMessage, ClientSuggestUserName, ClientUserChangesMessage, ClientVarMessage, CustomMessage, UserNewInfoMessage} from "../../static/js/types/SocketIOMessage";
46+
import {ChatMessageMessage, ClientReadyMessage, ClientSaveRevisionMessage, ClientSuggestUserName, ClientUserChangesMessage, ClientVarMessage, CustomMessage, PadDeleteMessage, UserNewInfoMessage} from "../../static/js/types/SocketIOMessage";
4747
import {Builder} from "../../static/js/Builder";
4848
const webaccess = require('../hooks/express/webaccess');
4949
const { checkValidRev } = require('../utils/checkValidRev');
@@ -211,6 +211,45 @@ exports.handleDisconnect = async (socket:any) => {
211211
});
212212
};
213213

214+
215+
const handlePadDelete = async (socket: any, padDeleteMessage: PadDeleteMessage) => {
216+
const session = sessioninfos[socket.id];
217+
if (!session || !session.author || !session.padId) throw new Error('session not ready');
218+
if (await padManager.doesPadExist(padDeleteMessage.data.padId)) {
219+
const retrievedPad = await padManager.getPad(padDeleteMessage.data.padId)
220+
// Only the one doing the first revision can delete the pad, otherwise people could troll a lot
221+
const firstContributor = await retrievedPad.getRevisionAuthor(0)
222+
if (session.author === firstContributor) {
223+
retrievedPad.remove()
224+
} else {
225+
226+
type ShoutMessage = {
227+
message: string,
228+
sticky: boolean,
229+
}
230+
231+
const messageToShout: ShoutMessage = {
232+
message: 'You are not the creator of this pad, so you cannot delete it',
233+
sticky: false
234+
}
235+
const messageToSend = {
236+
type: "COLLABROOM",
237+
data: {
238+
type: "shoutMessage",
239+
payload: {
240+
message: messageToShout,
241+
timestamp: Date.now()
242+
}
243+
}
244+
}
245+
socket.emit('shout',
246+
messageToSend
247+
)
248+
}
249+
}
250+
}
251+
252+
214253
/**
215254
* Handles a message from a user
216255
* @param socket the socket.io Socket object for the client
@@ -350,6 +389,7 @@ exports.handleMessage = async (socket:any, message: ClientVarMessage) => {
350389
stats.counter('pendingEdits').inc();
351390
await padChannels.enqueue(thisSession.padId, {socket, message});
352391
break;
392+
case 'PAD_DELETE': await handlePadDelete(socket, message.data as unknown as PadDeleteMessage); break;
353393
case 'USERINFO_UPDATE': await handleUserInfoUpdate(socket, message as unknown as UserNewInfoMessage); break;
354394
case 'CHAT_MESSAGE': await handleChatMessage(socket, message as unknown as ChatMessageMessage); break;
355395
case 'GET_CHAT_MESSAGES': await handleGetChatMessages(socket, message); break;

src/static/js/pad_editor.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,20 @@ const padeditor = (() => {
7575
padutils.setCheckbox($('#options-rtlcheck'), ('rtl' === html10n.getDirection()));
7676
});
7777

78+
79+
7880
// font family change
7981
$('#viewfontmenu').on('change', () => {
8082
pad.changeViewOption('padFontFamily', $('#viewfontmenu').val());
8183
});
8284

85+
// delete pad
86+
$('#delete-pad').on('click', () => {
87+
if (window.confirm(html10n.get('pad.delete.confirm'))) {
88+
pad.collabClient.sendMessage({type: 'PAD_DELETE', data:{padId: pad.getPadId()}});
89+
}
90+
})
91+
8392
// Language
8493
html10n.bind('localized', () => {
8594
$('#languagemenu').val(html10n.getLanguage());

src/static/js/types/SocketIOMessage.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,14 @@ export type ClientSaveRevisionMessage = {
192192
type: 'SAVE_REVISION'
193193
}
194194

195+
196+
export type PadDeleteMessage = {
197+
type: 'PAD_DELETE'
198+
data: {
199+
padId: string
200+
}
201+
}
202+
195203
export type GetChatMessageMessage = {
196204
type: 'GET_CHAT_MESSAGES',
197205
start: number,
@@ -283,7 +291,7 @@ export type ChangesetRequestMessage = {
283291

284292
export type CollabroomMessage = {
285293
type: 'COLLABROOM'
286-
data: ClientSendUserInfoUpdate | ClientUserChangesMessage | ChatMessageMessage | GetChatMessageMessage | ClientSaveRevisionMessage | ClientMessageMessage
294+
data: ClientSendUserInfoUpdate | ClientUserChangesMessage | ChatMessageMessage | GetChatMessageMessage | ClientSaveRevisionMessage | ClientMessageMessage | PadDeleteMessage
287295
}
288296

289297
export type ClientVarMessage = | ClientVarData | ClientDisconnectedMessage | ClientReadyMessage| ChangesetRequestMessage | CollabroomMessage | CustomMessage

src/static/skins/colibris/src/components/popup.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,3 +81,7 @@
8181
.skin-variant-container {
8282
text-transform: capitalize;
8383
}
84+
85+
#delete-pad {
86+
background-color: #ff7b72;
87+
}

src/templates/pad.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,10 +164,10 @@ <h2 data-l10n-id="pad.settings.myView"></h2>
164164
</p>
165165
<% e.end_block(); %>
166166
</div>
167-
167+
<button data-l10n-id="pad.settings.delete" id="delete-pad">Delete pad</button>
168168
<h2 data-l10n-id="pad.settings.about">About</h2>
169169
<span data-l10n-id="pad.settings.poweredBy">Powered by</span>
170-
<a href="https://etherpad.org">Etherpad</a>
170+
<a href="https://etherpad.org" target="_blank" referrerpolicy="no-referrer" rel="noopener">Etherpad</a>
171171
<% if (settings.exposeVersion) { %>(commit <%=settings.getGitCommit()%>)<% } %>
172172
</div></div>
173173

src/tests/backend/common.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,19 @@ export const sendUserChanges = async (socket:any, data:any) => await sendMessage
250250
},
251251
});
252252

253+
254+
/*
255+
* Convenience function to send a delete pad request.
256+
*/
257+
export const sendPadDelete = async (socket:any, data:any) => await sendMessage(socket, {
258+
type: 'PAD_DELETE',
259+
component: 'pad',
260+
data: {
261+
padId: data.padId
262+
},
263+
});
264+
265+
253266
/**
254267
* Convenience function that waits for an ACCEPT_COMMIT message. Asserts that the new revision
255268
* matches the expected revision.

ui/pad.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,7 @@ <h2 data-l10n-id="pad.settings.myView"></h2>
385385
</p>
386386

387387
</div>
388-
388+
<button data-l10n-id="pad.settings.delete">Delete pad</button>
389389
<h2 data-l10n-id="pad.settings.about">About</h2>
390390
<span data-l10n-id="pad.settings.poweredBy">Powered by</span>
391391
<a href="https://etherpad.org">Etherpad</a>

0 commit comments

Comments
 (0)