Procházet zdrojové kódy

Merge pull request #183 from nneka-nu/add-recent-boards

Show a list of recent boards on the home page
dev_h
Ophir LOJKINE před 4 roky
rodič
revize
12f1ccd5a9
Žádný účet není propojen s e-mailovou adresou tvůrce revize

+ 20
- 1
client-data/index.css Zobrazit soubor

@@ -49,7 +49,8 @@ main {
49 49
 	justify-content: space-around; 
50 50
 }
51 51
 
52
-#description{
52
+#description,
53
+#recent-boards {
53 54
 	flex: 100%;
54 55
 }
55 56
 
@@ -117,6 +118,24 @@ input {
117 118
 	width: 75%;
118 119
 }
119 120
 
121
+#recent-boards.hidden {
122
+	display: none;
123
+}
124
+
125
+#recent-boards ul {
126
+	list-style: none;
127
+	margin: 0;
128
+	padding: 0;
129
+}
130
+
131
+#recent-boards li {
132
+	margin-bottom: 8px;
133
+}
134
+
135
+#recent-boards li:last-child {
136
+	margin-bottom: 0;
137
+}
138
+
120 139
 footer {
121 140
 	text-align: center;
122 141
 	flex-shrink: 0;

+ 6
- 0
client-data/index.html Zobrazit soubor

@@ -59,6 +59,10 @@
59 59
 				<input type="submit" value="Go">
60 60
 			</form>
61 61
 		</div>
62
+
63
+		<div id="recent-boards" class="hidden">
64
+			<h3>{{{translations.recent_boards}}}</h3>
65
+		</div>
62 66
 	</main>
63 67
 
64 68
 
@@ -71,4 +75,6 @@
71 75
 	</footer>
72 76
 </body>
73 77
 
78
+<script src="../js/index.js" async defer></script>
79
+
74 80
 </html>

+ 22
- 0
client-data/js/board.js Zobrazit soubor

@@ -93,6 +93,28 @@ Tools.boardName = (function () {
93 93
 //Get the board as soon as the page is loaded
94 94
 Tools.socket.emit("getboard", Tools.boardName);
95 95
 
96
+function saveBoardNametoLocalStorage() {
97
+	var boardName = Tools.boardName;
98
+	if (boardName.toLowerCase() === 'anonymous') return;
99
+	var recentBoards, key = "recent-boards";
100
+	try {
101
+		recentBoards = JSON.parse(localStorage.getItem(key));
102
+		if (!Array.isArray(recentBoards)) throw new Error("Invalid type");
103
+	} catch(e) {
104
+		// On localstorage or json error, reset board list
105
+		recentBoards = [];
106
+		console.log("Board history loading error", e);
107
+	}
108
+	recentBoards = recentBoards.filter(function (name) {
109
+		return name !== boardName;
110
+	});
111
+	recentBoards.unshift(boardName);
112
+	recentBoards = recentBoards.slice(0, 20);
113
+	localStorage.setItem(key, JSON.stringify(recentBoards));
114
+}
115
+// Refresh recent boards list on each page show
116
+window.addEventListener("pageshow", saveBoardNametoLocalStorage);
117
+
96 118
 Tools.HTML = {
97 119
 	template: new Minitpl("#tools > .tool"),
98 120
 	addShortcut: function addShortcut(key, callback) {

+ 25
- 0
client-data/js/index.js Zobrazit soubor

@@ -0,0 +1,25 @@
1
+function showRecentBoards() {
2
+  var parent = document.getElementById("recent-boards");
3
+  var ul = document.querySelector("#recent-boards ul");
4
+  ul && parent.removeChild(ul);
5
+  parent.classList.add("hidden");
6
+
7
+  var recentBoards = JSON.parse(localStorage.getItem("recent-boards")) || [];
8
+  if (recentBoards.length === 0) return;
9
+
10
+  var list = document.createElement("ul");
11
+
12
+  recentBoards.forEach(function(name) {
13
+    var listItem = document.createElement("li");
14
+    var link = document.createElement("a");
15
+    link.setAttribute("href", `/boards/${encodeURIComponent(name)}`);
16
+    link.textContent = name;
17
+    listItem.appendChild(link);
18
+    list.appendChild(listItem);
19
+  });
20
+
21
+  parent.appendChild(list);
22
+  parent.classList.remove("hidden");
23
+}
24
+
25
+window.addEventListener("pageshow", showRecentBoards);

+ 12
- 0
server/translations.json Zobrazit soubor

@@ -25,6 +25,7 @@
25 25
     "pencil": "Stift",
26 26
     "private_board_description": "Du kannst ein <b>privates Whiteboard</b> mit einem zufälligen Namen erstellen, welches man nur mit seinem Link öffnen kann. Benutze dies wenn du private Informationen teilen möchtest.",
27 27
     "public_board_description": " Das <b>öffentliche Whiteboard</b> kann von jedem geöffnet werden. Es ein fröhliches unorganisiertes Chaos wo du zusammen mit anonymen Fremden malen kannst. Alles dort ist vergänglich.",
28
+    "recent_boards": "Neueste Whiteboards",
28 29
     "rectangle": "Rechteck",
29 30
     "share_instructions": "Um mit jemanden zusammen an einem Whiteboard zu arbeiten teile einfach die jeweilige URL.",
30 31
     "size": "Größe",
@@ -64,6 +65,7 @@
64 65
     "pencil": "Pencil",
65 66
     "private_board_description": "You can create a <b>private board</b> with a random name, that will be accessible only by its link. Use this if you want to share private information.",
66 67
     "public_board_description": "The <b>public board</b> is accessible to everyone. It is a happily disorganized mess where you can meet with anonymous strangers and draw together. Everything there is ephemeral.",
68
+    "recent_boards": "Recent Boards",
67 69
     "rectangle": "Rectangle",
68 70
     "share_instructions": "To collaborate on a drawing in real time with someone, just send them its URL.",
69 71
     "size": "Size",
@@ -101,6 +103,7 @@
101 103
     "pencil": "Lápiz",
102 104
     "private_board_description": "Puede crear una <b>pizarra privada</b> con un nombre aleatorio, al que solo se podrá acceder mediante su enlace. Úselo si desea compartir información privada.",
103 105
     "public_board_description": "La <b>pizarra pública</b> es accesible para todos. Es un desastre felizmente desorganizado donde puedes reunirte con extraños anónimos. Todo lo que hay es efímero.",
106
+    "recent_boards": "Pizarras recientes",
104 107
     "rectangle": "Rectángulo",
105 108
     "share_instructions": "Para colaborar en un dibujo en tiempo real con alguien, simplemente envíele la <abbr title=\"un enlace tipo: https://wbo.ophir.dev/boards/el-codigo-de-tu-pizarra\">URL</abbr> de la pizarra que ya creaste.",
106 109
     "size": "Tamaño",
@@ -138,6 +141,7 @@
138 141
     "pencil": "Crayon",
139 142
     "private_board_description": "Vous pouvez créer un <b>tableau privé</b> dont le nom sera aléatoire. Il sera accessible uniquement à ceux avec qui vous partagerez son adresse. À utiliser lorsque vous voulez partager des informations confidentielles.",
140 143
     "public_board_description": "Le <b>tableau anonyme</b> est accessible publiquement. C'est un joyeux bazar où vous pourrez rencontrer des étrangers anonymes, et dessiner avec eux. Tout ce que vous y inscrivez est éphémère.",
144
+    "recent_boards": "Tableaux récents",
141 145
     "rectangle": "Rectangle",
142 146
     "share_instructions": "Pour collaborer sur un tableau avec quelqu'un, envoyez-lui simplement son URL.",
143 147
     "size": "Taille",
@@ -176,6 +180,7 @@
176 180
     "pencil": "Ceruza",
177 181
     "private_board_description": "Készíthet egy <b>saját táblát</b> véletlenszerű névvel, amely csak a linkjével lesz elérhető. Használja ezt, ha személyes adatokat szeretne megosztani.",
178 182
     "public_board_description": "A <b>nyilvános tábla</b> mindenki számára elérhető. Ez egy boldog szervezetlen rendetlenség, ahol találkozhat a névtelen ismeretlenek és dolgozhat együtt. Minden ott rövid távú.",
183
+    "recent_boards": "Recent Boards",
179 184
     "rectangle": "Téglalap",
180 185
     "share_instructions": "Ha valakivel valós időben szeretne együttműködni egy rajzon, küldje el neki az URL-jét.",
181 186
     "size": "Méret",
@@ -213,6 +218,7 @@
213 218
     "pencil": "Matita",
214 219
     "private_board_description": "Puoi creare una <b>lavagna privata</b> con un nome casuale, che sarà accessibile solo dal suo URL. Usalo se vuoi condividere informazioni private.",
215 220
     "public_board_description": "La <b>lavagna pubblica</b> è accessibile a tutti. È un disastro felicemente disorganizzato dove puoi incontrare sconosciuti anonimi e disegnare insieme. Tutto in questo spazio è effimero.",
221
+    "recent_boards": "Lavagne recenti",
216 222
     "rectangle": "Rettangolo",
217 223
     "share_instructions": "Per collaborare a un disegno in tempo reale con qualcuno, basta condividere l'<abbr title=\"un link tipo https://wbo.ophir.dev/boards/il-codice-della-tua-lavagna\">URL della lavagna</abbr>.",
218 224
     "size": "Dimensione",
@@ -251,6 +257,7 @@
251 257
     "pencil": "ペン",
252 258
     "private_board_description": "プライベートな情報を共有したいときは、ランダムな名前を持つ、<b>プライベートボード</b>を作成できます。このボードはリンクを知っている人がアクセスできます。",
253 259
     "public_board_description": "<b>公開ボード</b>は、WBOにアクセスできる人であれば誰でも参加できますが、これは一時的な用途に向いています。",
260
+    "recent_boards": "Recent Boards",
254 261
     "rectangle": "矩形",
255 262
     "share_instructions": "URLを送るだけで、リアルタイムな共同作業ができます。",
256 263
     "size": "サイズ",
@@ -290,6 +297,7 @@
290 297
     "pencil": "Lápis",
291 298
     "private_board_description": "Você pode criar um <b> fórum privado </b> com um nome aleatório, que será acessível apenas por seu link. Use-o se quiser compartilhar informações privadas.",
292 299
     "public_board_description": "O <b> quadro público </b> está acessível a todos. É uma bagunça felizmente desorganizada, onde você pode se encontrar com estranhos anônimos e se reunir. Tudo ali é efêmero.",
300
+    "recent_boards": "Recent Boards",
293 301
     "rectangle": "Retângulo",
294 302
     "share_instructions": "Para colaborar em um desenho em tempo real com alguém, basta compartilhar sua URL.",
295 303
     "size": "Tamanho",
@@ -326,6 +334,7 @@
326 334
     "pencil": "Карандаш",
327 335
     "private_board_description": "<b>Приватная доска</b> обладает тем же функционалом, что и анонимная доска. Разница в том, что приватную доску могут видеть только те пользователи, у которых на нее есть ссылка. Используйте приватную онлайн доску в рабочих целях, проводите онлайн уроки, рисуйте с детьми или друзьями. Другие пользователи не смогут удалять или менять ваши работы без вашего разрешения.",
328 336
     "public_board_description": "<b>Анонимная доска</b> позволяет рисовать вместе онлайн. Используйте этот формат для творчества и кучи разных идей. Вдохновляйтесь уже существующими рисунками, дополняйте их и создавайте совместные работы с другими посетителями. Любой пользователь может удалять уже существующие элементы и рисунки.",
337
+    "recent_boards": "Недавние доски",
329 338
     "rectangle": "Прямоугольник",
330 339
     "share_instructions": "Использовать платформу для совместного творчества очень просто. Достаточно поделиться ссылкой URL с теми, кто хочет с вами порисовать. Как только они получат URL они смогут к вам присоединиться.",
331 340
     "size": "Размер",
@@ -365,6 +374,7 @@
365 374
     "pencil": "Олівець",
366 375
     "private_board_description": "Ви можете створити <b>особисту дошку</b> з випадковою назвою, яка буде доступна лише за відповідним посиланням. Користуйтесь нею, якшо Вам потрібно ділитись особистою інформацією.",
367 376
     "public_board_description": "<b>Публічна дошка</b> доступна для всіх. Там панує повний безлад, де Ви можете зустріти анонімних незнайомців та малювати разом. Тут все ефемерне.",
377
+    "recent_boards": "Recent Boards",
368 378
     "rectangle": "Прямокутник",
369 379
     "share_instructions": "Для спільної роботи на дошці досить повідомити іншій особі адресу URL.",
370 380
     "size": "Розмір",
@@ -403,6 +413,7 @@
403 413
     "pencil": "Gạch ngang",
404 414
     "private_board_description": "Bạn có thể tạo một <b> bảng riêng </b> với một tên ngẫu nhiên, chỉ có thể truy cập được bằng liên kết của nó. Sử dụng cái này nếu bạn muốn chia sẻ thông tin cá nhân.",
405 415
     "public_board_description": "Tất cả mọi người đều có thể truy cập <b> bảng công khai </b>. Đó là một mớ hỗn độn vô tổ chức vui vẻ, nơi bạn có thể gặp gỡ những người lạ vô danh và cùng nhau vẽ. Mọi thứ ở đó là phù du.",
416
+    "recent_boards": "Recent Boards",
406 417
     "rectangle": "Chữ nhật",
407 418
     "share_instructions": "Để cộng tác trên một bản vẽ trong thời gian thực với ai đó, chỉ cần gửi cho họ URL của bản vẽ đó.",
408 419
     "size": "Size",
@@ -440,6 +451,7 @@
440 451
     "pencil": "铅笔",
441 452
     "private_board_description": "您可以创建一个带有随机名称的私有白板,该白板只能通过其链接访问。如果要共享私人信息,请使用此选项。",
442 453
     "public_board_description": "每个人都可以使用公共白板。这是一个令人愉快的混乱的地方,你可以会见匿名陌生人,并在一起。那里的一切都是短暂的。",
454
+    "recent_boards": "Recent Boards",
443 455
     "rectangle": "矩形",
444 456
     "share_instructions": "要与某人实时协作绘制图形,只需向他们发送白板的URL。",
445 457
     "size": "尺寸",

Načítá se…
Zrušit
Uložit